Для соединения с удаленным хостом без ввода пароля, можно использовать так называемый Public key (публичный ключ). Нужно добавить запись о публичном ключе в файл ~/.ssh/authorized_keys на удаленном хосте. В данном случае для подключения используются ключи сгенерированные на стороне-клиенте. В cygwin создать /home директорию и .csh в ней, можно с помощью # mkdir -p /home/USER/.ssh
~/.ssh/id_dsa
-приватный ключ, ~/.ssh/id_dsa.pub
-публичный ключ.~/.ssh/authorized_keys2
, ~/ -домашняя директория.# ssh-keygen -t dsa -N '' # cat ~/.ssh/id_dsa.pub | ssh you@host-server "cat - >> ~/.ssh/authorized_keys2"
Коммерческую версию клиента, можно скачать с официального сайта: ssh.com. Ключи сгенерированные с помощью ssh.com клиента нужно переконвертировать в формат OpenSSH сервера, это делается с помощью ssh-keygen.
# cd ~/.ssh # ssh-keygen -i -f keyfilename.pub >> authorized_keys2
Putty, отличный бесплатные клиент под Windows.
# scp .ssh/puttykey.pub root@192.168.51.254:.ssh/
# cd ~/.ssh # ssh-keygen -i -f puttykey.pub >> authorized_keys2
При первом подключении, ssh проверит, если хост с данным отпечатком неизвестен, будет запрошено подтверждение yes/no
, если ответ будет yes
, хост будет добавлен в файл ~/.ssh/known_hosts
и при следующи подключении будет сразу запрошен пароль для подключения, если ответ будет no
, соединение будет разорвано.
# ssh linda The authenticity of host 'linda (192.168.16.54)' can't be established. DSA key fingerprint is 14:4a:aa:d9:73:25:46:6d:0a:48:35:c7:f4:16:d4:ee. Are you sure you want to continue connecting (yes/no)? yes
Получить отпечаток можно командой ssh-keygen -l
на сервере:
# ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub # Для RSA ключа 2048 61:33:be:9b:ae:6c:36:31:fd:83:98:b7:99:2d:9f:cd /etc/ssh/ssh_host_rsa_key.pub # ssh-keygen -l -f /etc/ssh/ssh_host_dsa_key.pub # Для DSA ключа (по-умолчанию) 2048 14:4a:aa:d9:73:25:46:6d:0a:48:35:c7:f4:16:d4:ee /etc/ssh/ssh_host_dsa_key.pub
# scp file.txt remote_host:/tmp # scp joe@remote_host:/www/*.html /www/tmp # scp -r joe@remote_host:/www /www/tmp
Еще пара примеров использования SCP
# scp -P 2525 ./file_to_copy root@remote_host:/tmp/copied_file
В данном случае, у нас удаленный sshd
, сидит на нестандартном порту, поэтому с помощью опции "-P"
, указываем на какой порт подключаемся. Не путайте с ключем "-p"
у программы ssh
, для указания порта, для scp
, опция "-p"
, означает "Сохранить время модификации, время последнего доступа, и режимы, оригинального файла".
в случае, если у пользователя, под которым вы пытаетесь подключится для копирования, установлен пароль ( что собственно и должно быть ), SCP
попросит его ввести, выглядит это примерно так.
# scp -P 2222 ./file_to_copy user@remote_host:~/copied_file
# Password: вводим пароль, жмем Ентер
# copied_file
Подключить удаленную папку можно с помощью Konqueror или Midnight Commander.. введя путь в виде user@gate. Кроме того можно воспользоваться утилитой sshfs, это клиент для файловых систем на базе SCP. See fuse sshfs.
SSH туннелирование позволяет делать форвардинг портов (перенаправление) через SSH туннель, обеспечивая прохождение трафика через заблокированые порты (работает только на TCP).
SSH Туннель создается из слушающего сокета на определенном порту localhost
. Затем все принятые на локальном хосте/порту соединения перенаправляются через SSH на удаленный хост/порт.
# ssh -L localport:desthost:destport user@gate # Хост назначения будет представлять из себя локальный порт # ssh -R destport:desthost:localport user@gate # Локальный порт будет проброшен на указанный порт удаленного хоста # ssh -X user@gate # Принудительный форвардинг Х сеанса
# ssh -L 2401:localhost:2401 -L 8080:localhost:80 user@gate
# ssh -L 139:smbserver:139 -L 3388:smbserver:3389 user@gateThe smb share can now be accessed with \\127.0.0.1\, but only if the local share is disabled, because the local share is listening on port 139.
Есть две машины, находящиеся за NAT шлюзом, клиенту cliadmin нужно подключится к клиенту cliuser, оба имеют доступ к Linux-шлюзу по ssh. Поскольку будут использованы порты, выше 1024, root доступ не понадобится. На шлюзе мы используем порт 2022.
На клиенте cliuser:
# ssh -R 2022:localhost:22 user@gate # Форвардинг порта клиента 22, на порт 2022, шлюза
На клиенте cliadmin:
# ssh -L 3022:localhost:2022 admin@gate # Форвардинг порта клиента 3022, на порт 2022 шлюза
Теперь администратор может напрямую подключится к cliuser:
# ssh -p 3022 admin@localhost # local:3022 -> gate:2022 -> client:22
# ssh -R 15900:localhost:5900 user@gateОт клиента cliadmin:
# ssh -L 5900:localhost:15900 admin@gateТеперь админ может напрямую подключится к клиентскому VNC:
# vncconnect -display :0 localhost
Создание туннеля в одной оболочке
клиент -> хост1 -> хост2 -> сервер and dig tunnel 5678Клиент># ssh -L5678:localhost:5678 host1 # 5678 произвольный порт для туннеля хост_1># ssh -L5678:localhost:5678 host2 # звено 5678 с хохта1 на хост2 хост_2># ssh -L5678:localhost:22 server # и тцннель на порт 22 сервера
# ssh -p 5678 localhost # прямое подключение клиент - сервер # scp -P 5678 myfile localhost:/tmp/ # Копируем файлы напрямую # rsync -e 'ssh -p 5678' myfile localhost:/tmp/ # или так-же напрямую синхронизируем файлы