it-swarm-ru.tech

Как автоматизировать SSH вход с паролем?

Как автоматизировать SSH вход с паролем? Я настраиваю свою тестовую ВМ, поэтому строгая безопасность не рассматривается. SSH выбран для приемлемой безопасности с минимальной конфигурацией.

ех)

echo password | ssh [email protected]

Это не работает.

Я помню, я делал это с некоторыми уловками, которые кто-то направлял меня, но я не могу вспомнить уловку, которую я использовал ...

462
Eonil

Не используйте пароль. Сгенерируйте SSH-ключ без пароля и отправьте его на виртуальную машину.

Если у вас уже есть ключ SSH, вы можете пропустить этот шаг ... Просто нажмите Enter для ключа и обеих паролей:

$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.

Скопируйте ключи на целевой сервер:

$ ssh-copy-id [email protected]
[email protected]'s password: 

Теперь попробуйте войти в систему с помощью ssh '[email protected]' и ​​проверьте:

.ssh/authorized_keys

чтобы убедиться, что мы не добавили дополнительные ключи, которые вы не ожидали.

Наконец, проверьте вход в систему ...

$ ssh [email protected]

[email protected]:~$ 

Вы также можете посмотреть на использование ssh-agent если вы хотите защитить свои ключи парольной фразой.

404
Cakemox
$ Sudo apt-get install sshpass
$ sshpass -p your_password ssh [email protected]
637
weekens

Хотя правильный ответ на ваш вопрос sshpass ( подробности см. В другом ответе ), существует более безопасный способ - SSH ключи. Вы просто три простых шага от решения:

Введите следующую команду, чтобы начать создание пары ключей rsa :

# ssh-keygen

Когда появится сообщение "Введите файл для сохранения ключа", просто оставьте имя файла пустым, нажав Enter.

Когда терминал попросит вас ввести фразу-пароль, просто оставьте это поле пустым и нажмите Enter.

Затем скопируйте пару ключей на сервер с помощью одной простой команды :

# ssh-copy-id [email protected]

теперь вы можете войти без пароля :

# ssh [email protected]
74
lzap

Используйте ожидайте:

#!/usr/bin/expect -f
#  ./ssh.exp password 192.168.1.11 id
set pass [lrange $argv 0 0]
set server [lrange $argv 1 1]
set name [lrange $argv 2 2]

spawn ssh [email protected]$server
match_max 100000
expect "*?assword:*"
send -- "$pass\r"
send -- "\r"
interact

Пример:

# ./1.ex password localhost ooshro
spawn ssh [email protected]
[email protected]'s password: 
Linux ubuntu-1010-server-01 2.6.35-25-generic-pae #44-Ubuntu SMP Fri Jan 21 19:01:46 UTC 2011 i686 GNU/Linux
Ubuntu 10.10

Welcome to Ubuntu!
 * Documentation:  https://help.ubuntu.com/
Last login: Tue Mar  1 12:41:12 2011 from localhost
42
ooshro

Я удивлен, что никто не упомянул plink из PuTTY-tools пакет в Ubuntu:

plink [email protected] -pw mypass  [cmd]

Он также доступен в Windows, и его синтаксис в основном совместим с клиентом openssh.

17
eadmaster

Это может быть бесполезно для вас, но вы можете сделать это с помощью Perl:

\#!/usr/bin/Perl  
use warnings;  
use strict;  

use Net::SSH::Perl;  
my $Host = 'remote.serv.er';  
my $user = 'root';  
my $pass = 'hunter2';  
my $ssh = Net::SSH::Perl->new('$Host');  
$ssh->login('$user', '$pass') or die "Oh noes! $!";
16
James L

Единая регистрация SSH обычно достигается с помощью аутентификации с открытым ключом и агента аутентификации. Вы можете легко добавить свой тест VM к существующему агенту аутентификации (см. Пример ниже). Другие методы, такие как gssapi/kerberos, существуют, но являются более сложными.

sshpass

В ситуациях, когда password является единственным доступным методом аутентификации, sshpass может использоваться для автоматического ввода пароля. Обратите особое внимание на СООБРАЖЕНИЯ ПО БЕЗОПАСНОСТИ в разделе man-страница . Во всех трех вариантах пароль виден или хранится в незашифрованном виде в некоторый момент :

Анонимный канал (рекомендуется sshpass)

# Create a pipe
PIPE=$(mktemp -u)
mkfifo -m 600 $PIPE
# Attach it to file descriptior 3
exec 3<>$PIPE
# Delete the directory entry
rm $PIPE
# Write your password in the pipe
 echo 'my_secret_password' >&3
# Connect with sshpass -d
sshpass -d3 ssh [email protected]

# Close the pipe when done
exec 3>&-

Это довольно громоздко в bash, возможно, проще с языками программирования. Другой процесс может подключиться к вашему каналу/fd до того, как будет написан пароль. Окно возможностей довольно короткое и ограничено вашими процессами или корнем.

Переменная среды

# Set your password in an environment variable
 export SSHPASS='my_secret_password'
# Connect with sshpass -e
sshpass -e ssh [email protected]

Вы и пользователь root можете читать переменные среды вашего процесса (т. Е. Ваш пароль) во время работы sshpass (cat /proc/<pid>/environ | tr '\0' '\n' | grep ^SSHPASS=). Окно возможностей намного длиннее, но все еще ограничено вашими собственными процессами или корнем, а не другими пользователями.

Аргумент командной строки (наименее безопасный)

 sshpass -p my_secret_password ssh [email protected]

Это удобно, но менее безопасно, как описано на странице руководства. Аргументы командной строки видны всем пользователям (например, ps -ef | grep sshpass). sshpass пытается скрыть аргумент, но все равно есть окно, в течение которого все пользователи могут видеть ваш пароль переданным аргументом.

Примечание

Установите для bash переменная HISTCONTROL значение ignorespace или ignoreboth и ​​добавьте в пробел к вашим чувствительным командам пробел. Они не будут сохранены в истории.


SSH аутентификация с открытым ключом

# Generate a key pair
# Do NOT leave the passphrase empty
ssh-keygen
# Copy it to the remote Host (added to .ssh/authorized_keys)
ssh-copy-id [email protected]

Пароль очень важен. Любой, кто получит файл с закрытым ключом, не сможет использовать его без ключевой фразы.

Настройте агент аутентификации SSH

# Start the agent
eval `ssh-agent`
# Add the identity (private key) to the agent
ssh-add /path/to/private-key
# Enter key passphrase (one time only, while the agent is running)

Подключите как обычно

ssh [email protected]

Преимущество заключается в том, что ваш закрытый ключ зашифрован, и вам нужно ввести его пароль только один раз (с помощью более безопасного метода ввода).

12
nrolans

Уверены, что не хотите использовать ключи SSH, а не пароли? Таким образом, это безопасно и автоматически.

8
Coops

В зависимости от ваших потребностей в автоматизации, возможно, Ansible подойдет для вас. Он может прекрасно управлять такими вещами, как запрос пароля, запрос пароля Sudo, различные способы изменения использования, безопасное использование зашифрованных секретов (хранилище).

Если это не подходит, я бы предложил Expect, как предложено в другом ответе.

4
Cameron Kerr

Я предпочитаю passhhttps://github.com/clarkwang/passh

sshpass не работает по дизайну.

когда сервер ssh не добавлен уже в мой known_hosts, sshpass не покажет мне сообщение о добавлении сервера к моим известным хостам, passh не имеют этой проблемы.

Вход на удаленный сервер:

$ passh -p password ssh [email protected]
1
Badr Elmers