SSH из Windows в Linux без ввода пароля

11

Я пытаюсь использовать ssh / scp из Windows в Linux без ввода пароля.

Это то, что я сделал, и это не похоже на работу:

  • генерирует открытый и закрытый ключи с помощью Putty Key Generator (в Windows)
  • сохранил файлы как id_rsa.pubиid_rsa
  • скопировал их в ~/.ssh
  • добавлен id_rsa.pub в окно Linux в ~/.ssh/authorized_keys
  • Затем я пытаюсь sshна Linux окно из Windows, и мне все еще нужно ввести пароль

Я что-то пропустил?

Питер Мортенсен
источник

Ответы:

10

Вы должны запустить агент аутентификации в Windows.

Например, Pageant , используемый в сочетании с PuTTY (графический клиент SSH) или Plink (его эквивалент командной строки).

Вам нужно сообщить Pageant открытый ключ вашего SSH-сервера. После этого он будет обрабатывать запросы аутентификации вашего сервера, пока работает в фоновом режиме.

Сильвио Доннини
источник
2
Примечание. (Это не было очевидно для меня.) При открытии Pageant он будет отображаться в виде значка в области уведомлений в правом нижнем углу. Щелкните правой кнопкой мыши, выберите « Добавить ключ» и выберите файл .ppk, созданный из puttygen.
Badjr
8

Вам нужен конкурс .

Посмотрите видео Логин без пароля с PuTTY и Pageant . И / или в блоге Howto: SSH-аутентификация без пароля с PuTTY .

Эдуардо
источник
1
Пожалуйста, попробуйте ссылки на текстовые учебники вместо видео.
кодер
Ссылка на блог не работает. Попробуйте это: tecmint.com/ssh-passwordless-login-with-putty
Кай Ван
2
Ссылка на блог сломана - точная причина, по которой ответы должны быть больше, чем ссылка.
Ramhound
5

Попробуйте Plink (часть PuTTY)

 plink -v youruser@yourhost.com -pw yourpw "some linux command"
Карлос Гутьеррес
источник
3
+1 за правильный ответ, но вам лучше использовать пару открытый / закрытый ключ, чем пароль.
Тед Персиваль
Несмотря на альтернативу, с plink у вас не может быть нормального терминала с ним, например: клавиши со стрелками не будут работать для истории bash
PYK
3

Настройка аутентификации по ключу SSH может быть немного сложнее. Похоже, вы покрываете все свои базы. Одна вещь, которая часто застает людей врасплох - вам нужно убедиться, что .sshкаталог и его содержимое принадлежат вам и доступны для чтения / записи только вам.

Обязательно запустите это (на всех ваших .sshкаталогах):

chmod -R 700 on ~/.ssh

Если это не сработает, включите подробное ведение журнала, добавив -vк своей sshкоманде (вы можете добавить до трех -vsсекунд для большей детализации).

rcw3
источник
2

Я предполагаю, что ваши ключи не защищены паролем, и вы получаете не запрос пароля вашего ключа.

~ / .ssh не используется замазкой на стороне окон, и у замазки нет настройки закрытого ключа по умолчанию. Если вы используете ssh-клиент командной строки, такой как cygwin, создание каталога .ssh вне вашего дома будет работать. От замазки вам нужно будет настроить и сохранить сеанс.

В диалоговом окне конфигурации замазки посмотрите на соединение -> данные и заполните поле имени пользователя для автоматического входа. Затем перейдите в раздел connection -> ssh -> auth и правильно установите свой закрытый ключ. Затем вернитесь в диалог сеанса и сохраните этот сеанс. Вы также можете установить имя хоста, если хотите.

Когда у вас есть сохраненный сеанс, вы можете использовать 'putty -load "savesession"'.

Андрей Б
источник
Кроме того, chmod 700 ~ / .ssh на целевой машине и chmod 644 ~ / .ssh / авторизованные ключи. Как только я следовал вашим инструкциям и правильно установил права доступа, он начал работать для меня.
Blisterpeanuts
2

Я использовал это:

C: \> type c:\users\my_name\.ssh\id_rsa.pub | ssh root@172.110.1.171 "cat >> ~/.ssh/authorized_keys"

Роберт Джабаров
источник
1

Вам также может понадобиться изменить разрешения в вашем домашнем каталоге:

chmod 755 ~
Гайдн
источник
1

Я смог сделать это именно с Windows 7помощью -iопции для предоставления личного ключа идентификации:

ssh -i X: \ win-path \ to \ private-key remoteuser@remote.host.com

кроме того, что на удаленном хосте мои авторизованные ключи находятся в /etc/ssh/authorized_keys/remoteuserи в /etc/ssh/sshd_config, я изменил

#AuthorizedKeysFile     .ssh/authorized_keys
AuthorizedKeysFile      /etc/ssh/authorized_keys/%u

но я не знаю, должен ли иметь значение удаленный конфиг SSH.

amphibient
источник
1

Все, что вам нужно, это кроссплатформенные sshинструменты командной строки, ssh-keygen& ssh-copy-id. Git для Windows включает их.

Либо сделайте это из установленной bashоболочки git :

#By default this puts keyfile pair in ~/.ssh/id_rsa & ~/.ssh/id_rsa.pub :

ssh-keygen.exe -t rsa -b 2048 
ssh-copy-id -i ~/.ssh/id_rsa.pub  $remoteuser@$remotehost

# These two chmod lines are needed on unix platforms, probably not on Windows. 
# typically ssh refuses to use a private key file 
# if it is less-well protected than this:
chmod 700 ~/.ssh
chmod 640 ~/.ssh/id_rsa

Или запустите этот скрипт в PowerShell:

Param(
  [Parameter()][string]$keyfile="id_rsa",
  [Parameter()][string]$remotehost,
  [Parameter()][string]$remoteuser
  )
write-host "# ---------------------------------------------------------------------------------#"
write-host "# Create an RSA public/private key pair, and copy the public key to remote server  #"
write-host "#                                                                                  #"
write-host "# /superuser/96051                                            #"
write-host "#         ssh-from-windows-to-linux-without-entering-a-password/1194805#1194805    #"
write-host "#                                                                                  #"
write-host "# ---------------------------------------------------------------------------------#"

write-host "Keyfile pair will be saved at : ~/.ssh/$keyfile, ~/.ssh/$keyfile.pub"
write-host "And copied to $remoteuser@$remotehost"
write-host ""
write-host "You will need a password for the copy operation."
write-host ""

if( -not $(ls ~/.ssh) ) { mkdir ~/.ssh }
$sshdir=$(get-item ~/.ssh/).Fullname

#By default this puts keyfile pair in ~/.ssh/id_rsa & ~/.ssh/id_rsa.pub :
ssh-keygen.exe -t rsa -b 2048 -f "$sshdir$keyfile"

# ssh-copy-id somehow didn't work in Powershell so I called it via bash
bash -c "ssh-copy-id -i ~/.ssh/$keyfile.pub $remoteuser@$remotehost"

# I'm not sure if these two chmod lines work on windows but 
# typically ssh refuses to use a private key file 
# if it is less-well protected than this:
chmod.exe 700 $sshdir
chmod.exe 640 "$sshdir$keyfile"

После этого, логин без пароля должен работать как для, так sshи для scp.

Крис Ф. Кэрролл
источник