SSH и SCP без ввода пароля на openSSH

В этой статье я объясню, как выполнять ssh и scp без ввода пароля с помощью проверки подлинности SSH Public Key с SSH Agent на openSSH

В проверке подлинности ключей SSH есть два уровня безопасности. Для того, чтобы войти, вам нужен как частный ключ, так и пароль. Даже если один из них скомпрометирован, злоумышленник все равно не может войти в вашу учетную запись, так как оба они необходимы для входа в систему. Это гораздо лучше, чем типичная аутентификация на основе пароля, где, если пароль скомпрометирован, злоумышленник может получить доступ к системе.

Есть два способа выполнить ssh и scp без ввода пароля:

  1. Нет фразы. При создании ключевой пары оставьте фразу пустой. Используйте эту опцию для автоматической обработки пакетов. например, если вы работаете Cron работу по копированию файлов между машинами это подходящий вариант.
  2. Используйте passphrase и SSH Agent. Если вы используете ssh и scp интерактивно из командной строки, и вы не хотите использовать пароль каждый раз, когда вы выполняете ssh или scp, я не рекомендую предыдущую опцию (без фразы), так как вы устранили один уровень безопасности в ssh ключевой аутентификации. Вместо этого используйте пароль при создании ключевой пары и используйте SSH Agent для выполнения ssh и scp без необходимости вводить пароль каждый раз, как это объясняется в шагах ниже.

Следующие 8 шагов объясняет, как выполнять SSH и SCP от локального хоста до удаленного хоста без ввода пароля в системе openSSH

1. Убедитесь, что локальный хост и удаленный хост работает openSSH

[local-host]$ ssh -V
OpenSSH_4.3p2, OpenSSL 0.9.8b 04 May 2006

[remote-host]$ ssh -V
OpenSSH_4.3p2, OpenSSL 0.9.8b 04 May 2006

2. Создание ключевой пары на локальном хосте с помощью ssh-keygen

[local-host]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jsmith/.ssh/id_rsa):<Hit enter>
Enter passphrase (empty for no passphrase): <Enter your passphrase here>
Enter same passphrase again:<Enter your passphrase again>
Your identification has been saved in /home/jsmith/.ssh/id_rsa.
Your public key has been saved in /home/jsmith/.ssh/id_rsa.pub.
The key fingerprint is:
31:3a:5d:dc:bc:81:81:71:be:31:2b:11:b8:e8:39:a0 [email protected]

Публичный ключ и частный ключ, как правило, хранятся в папке .ssh под домашним каталогом. В этом примере он находится под /home/jsmith/.sshd. Вы не должны делиться личным ключом ни с кем.

По умолчанию ssh-keygen на openSSH генерирует ключевую пару RSA. Вы также можете создать ключевую пару DSA, используя: ssh-keygen-t dsa команду.

 

 

3. Установка общедоступного ключа на удаленном хосте.

Скопируйте содержимое общедоступного ключа у местного хоста и вставьте его в /home/jsmith/.ssh/authorized_keys на удаленном хосте. Если /home/jsmith/.ssh/authorized_keys уже есть другой публичный ключ, вы можете придать этому конец. Если каталога .ssh под домашним каталогом на удаленном хосте не существует, пожалуйста, создайте его.

[remote-host]$ vi ~/.ssh/authorized_keys 
ssh-rsa ABIwAAAQEAzRPh9rWfjZ1+7Q369zsBEa7wS1RxzWR [email protected]

Простыми словами, скопируйте local-host:/home/jsmith/.ssh/id_rsa.pub to remote-host:/home/jsmith/.ssh/authorized_keys

4. Дайте соответствующее разрешение каталогу .ssh на удаленном хосте.

[remote-host]$ chmod 755 ~/.ssh
[remote-host]$ chmod 644 ~/.ssh/authorized_keys

5. Войти из локального хоста в удаленный хост с помощью проверки подлинности клавиш SSH, чтобы проверить, работает ли он должным образом.

[local-host]$ <You are on local-host here>

[local-host]$ ssh -l jsmith remote-host
Enter passphrase for key '/home/jsmith/.ssh/id_rsa': <Enter your passphrase here>
Last login: Sat Jun 07 2008 23:03:04 -0700 from 192.168.1.102
No mail. [remote-host]$ <You are on remote-host here>

6. Запустите SSH Agent на локальном хосте, чтобы выполнить ssh и scp без необходимости вводить passphrase несколько раз.

Проявите, работает ли агент SSH, если не запустите его, как показано ниже.

[local-host]$ ps -ef | grep ssh-agent
511 9789 9425 0 00:05 pts/1 00:00:00 grep ssh-agent

[local-host]$ ssh-agent $SHELL

[local-host]$ ps -ef | grep ssh-agent
511 9791 9790 0 00:05 ? 00:00:00 ssh-agent /bin/bash
511 9793 9790 0 00:05 pts/1 00:00:00 grep ssh-agent

7. Загрузите частный ключ к агенту SSH на локальном хосте.

[local-host]$ ssh-add
Enter passphrase for /home/jsmith/.ssh/id_rsa: <Enter your passphrase here>
Identity added: /home/jsmith/.ssh/id_rsa (/home/jsmith/.ssh/id_rsa)

Ниже приведены различные варианты, доступные в ssh-добавить:

  • ssh-add <key-file-name>: Load a specific key file.
  • ssh-add -l: List all the key loaded in the ssh agent.
  • ssh-add -d <key-file-name>: Delete a specificy key from the ssh agent
  • ssh-add -D: Delete all key

8. Выполните SSH или SCP удаленного home от локального хоста без ввода пароля.

[local-host]$<You are on local-host here>

[local-host]$ ssh -l jsmith remote-host
Last login: Sat Jun 07 2008 23:03:04 -0700 from 192.168.1.102
No mail. <ssh did not ask for passphrase this time> [remote-host]$ <You are on remote-host here>