Вопрос: Как автоматизировать логин SSH с паролем?


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

ех)

echo password | ssh id@server

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

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


318
2018-03-01 11:07


Источник


FreeBSD не принимала ключи без пароля. Не соблазняйтесь. Однако некоторые серверы Linux приняли его. Я считаю, что сервер Linux был неправильно настроен. - Eonil
Это правильный вопрос. Например, я хочу разрешить пользователю вводить пароль, а затем подключиться к другому компьютеру, используя его. Я не могу предположить, что на всех наших машинах будут распределены ключи ssh. Ответы, приведенные ниже, не помогают этой ситуации. - dfrankow
unix.stackexchange.com/questions/38737/... || unix.stackexchange.com/questions/38737/... || stackoverflow.com/questions/233217/pass-password-to-su-sudo-ssh - Ciro Santilli 新疆改造中心 六四事件 法轮功
Очень важный вопрос. Мне тоже нужен ответ, мой провайдер веб-пространства блокирует размещение на сервере ключей, поэтому я должен передать passwort без keyfiles. - Radon8472


Ответы:


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

Если у вас уже есть 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 если вы хотите, чтобы ваши ключи защищены парольной фразой.


282
2018-03-01 11:17



Наконец я решил использовать пары ключей. Потому что я понял, что это самый простой способ. - Eonil
@Eonil: Не поддавайтесь соблазну использовать клавиши без фразы. Узнайте, как использовать ssh-agent или конкурс. - Iain
Если на вашем компьютере нет ssh-copy-id, этот фрагмент (который отправляет ключ по трубопроводу ssh) эквивалентен. Кроме того, в Mac OS X установите ssh-copy-id с помощью Homebrew: brew install ssh-copy-id, - Rory O'Kane
Это хороший ответ, но не правильный ответ на вопрос. - John Hunt
Такого рода ответы действительно, действительно раздражают меня. Это был не вопрос. Никто не спрашивал, как использовать пары ключей. - Matt Fletcher


$ sudo apt-get install sshpass
$ sshpass -p your_password ssh user@hostname

473
2018-05-31 09:08



Да, иногда вы не можете использовать аутентификацию по ключевому слову по разным причинам .. например, прямо сейчас я не могу использовать keyauth на сервере plesk, потому что ящик не включен и у меня нет root. - John Hunt
+1! В качестве побочного примечания вам нужно просто запустить ssh один раз перед использованием sshpass, чтобы подтвердить отпечаток RSA - user123444555621
-1 для использования пароля в команде. Это регистрирует пароль в .bash_history в текстовом виде на вашем компьютере.
@MisterDood Вы можете запустить history -r после команды удалить свою историю. Хороший момент. - NuclearPeon
Совет. Если вы не хотите, чтобы определенная команда отображалась в .bash_history, префикс команды с пробелом. Это просто работает. Однако пользователям этой команды следует больше беспокоиться о том, что не-привилегированные пользователи в системе могут видеть полную командную строку с ps, что, конечно же, включает в себя пароль. Поскольку сеансы ssh имеют тенденцию быть долговечными, это проблема безопасности. - CubicleSoft


Легкий ответ в три простых шага

Создать rsa keypair:

# ssh-keygen

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

# ssh-copy-id userid@hostname

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

# ssh userid@hostname

51
2017-11-14 12:57



Прекрасно работает со значениями по умолчанию. Использование ~ / rsa4live.pub не работало для меня при попытке ssh-copy-id, - Cees Timmerman
Если вы хотите, чтобы эти действия работали для разных пользователей, 1. ssh-keygen 2. ssh-copy-id nazir @ hostname 3. ssh nazir @ hostname - Venfah Nazir
Для меня это было ssh-copy-id -i ~/.ssh/tatu-key-ecdsa user@host - Gabriel Fair
Это не ответ на вопрос. - Steve Bennett
А также? Ответ выше, sshpass ... - 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 $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

23
2018-03-01 11:08



Он работал, но он не может печатать станцию ​​удаленной машины. - Eonil
он хорошо работает для некоторых машин не может поставить ключ заранее, так как IP-адрес меняется каждый раз. - larrycai
будет полезно добавить -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null для команды ssh, а также не принимать машину в known_hosts - larrycai
B .. b но muh ssh ключи ... - Damien Ó Ceallaigh
Более подробный пример этого скрипта вы можете найти по адресу: linuxaria.com/howto/...  Эти примеры здесь также должны работать с удаленными командами - Radon8472


Это может вам не пригодиться, но вы можете сделать это с помощью 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! $!";

11
2018-03-01 11:52



Аналогично, вы можете сделать это с Ruby github.com/net-ssh/net-ssh - EnabrenTane


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


9
2018-03-01 11:14



Использование SSH-ключей без пароля лишь немного более безопасно, чем использование паролей в файле. - yunzen
@yunzen Неверно. Ключ-аутентификация защищает вас от мит-атак, даже если вы не знаете ключ хоста. Злоумышленник может олицетворять сервер, но никогда не подключается к реальному серверу. При аутентификации пароля любой сервер, к которому вы подключаетесь (законный или нет), будет видеть пароль. По этим причинам ключ ssh без пароля намного безопаснее, чем просто сохранение пароля в файле. - kasperd
Это не ответ. - Steve Bennett
@SteveBennett Это то же самое, что и принятый ответ, и был опубликован до него, хотя он имеет меньше деталей. - Michael Hampton♦
Хорошо, я бы сказал, что принятый ответ - достойный ответ на вопрос, который не был задан. Это ничего. - Steve Bennett


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

plink user@domain -pw mypass  [cmd]

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


0
2017-07-09 13:15



Для Windows ваш ответ хорош, неслучайный пользователь linux / unix обычно не имеет plink - Radon8472