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

Мы используем комбинацию logparser и tail/awk в зависимости от ситуации

436
задан 23 August 2013 в 12:11
10 ответов

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

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

$ 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 id@server
id@server's password: 

Теперь попытайтесь войти в машину, с ssh 'id@server', и регистрация:

.ssh/authorized_keys

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

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

$ ssh id@server

id@server:~$ 

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

392
ответ дан 28 November 2019 в 19:13

Использование ожидает:

#!/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 $name@$server
match_max 100000
expect "*?assword:*"
send -- "$pass\r"
send -- "\r"
interact

Пример:

# ./1.ex password localhost ooshro
spawn ssh ooshro@localhost
ooshro@localhost'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
40
ответ дан 28 November 2019 в 19:13

Это не могло бы быть никаким использованием Вам, но можно сделать это с 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
ответ дан 28 November 2019 в 19:13

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

9
ответ дан 28 November 2019 в 19:13

Хотя правильный ответ на ваш вопрос - sshkey , есть более безопасный способ - ключи SSH. От вас всего три простых шага от решения:

Создайте пару ключей rsa :

# ssh-keygen

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

# ssh-copy-id userid@hostname

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

# ssh userid@hostname
73
ответ дан 28 November 2019 в 19:13
$ sudo apt-get install sshpass
$ sshpass -p your_password ssh user@hostname
611
ответ дан 28 November 2019 в 19:13

Ich bin überrascht niemand erwähnte plink aus dem putty-tools -Paket in Ubuntu:

plink user@domain -pw mypass  [cmd]

Es ist auch unter Windows verfügbar und die Syntax ist größtenteils mit dem openssh-Client kompatibel.

16
ответ дан 28 November 2019 в 19:13

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

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

4
ответ дан 28 November 2019 в 19:13

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

sshpass

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

Анонимный канал (рекомендуется 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 user@host

# Close the pipe when done
exec 3>&-

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

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

# Set your password in an environment variable
 export SSHPASS='my_secret_password'
# Connect with sshpass -e
sshpass -e ssh user@host

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

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

 sshpass -p my_secret_password ssh user@host

Это удобно, но менее безопасно, как описано на странице руководства. Аргументы командной строки видны всем пользователям (например, 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 user@host

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

Настройте агент аутентификации 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 user@host

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

10
ответ дан 28 November 2019 в 19:13

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

sshpass не работает преднамеренно.

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

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

$ passh -p password ssh user@host
7
ответ дан 11 January 2020 в 22:26

Теги

Похожие вопросы