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

<p>как автоматизировать ssh вход с паролем? я настраиваю свою тестовую вм, поэтому строгая безопасность не рассматривается. ssh выбран для приемлемой безопасности с минимальной конфигурацией.</p><p>ех)</p><pre><code>echo password | ssh id@server </code></pre><p>это не работает.</p><p>я помню, я делал это с некоторыми уловками, которые кто-то направлял меня, но я не могу вспомнить уловку, которую я использовал ...</p>

<p>не используйте пароль. сгенерируйте ssh-ключ без пароля и отправьте его на виртуальную машину.</p><p>если у вас уже есть ключ ssh, вы можете пропустить этот шаг ... просто нажмите <kbd>enter</kbd> для ключа и обеих паролей:</p><pre><code>$ 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: </code></pre><p>теперь попробуйте войти в систему с помощью <code>ssh 'id@server'</code> и проверьте:</p><pre><code>.ssh/authorized\_keys </code></pre><p>чтобы убедиться, что мы не добавили дополнительные ключи, которые вы не ожидали.</p><p>наконец, проверьте вход в систему ...</p><pre><code>$ ssh id@server id@server:~$ </code></pre><p>вы также можете посмотреть на использование <code>ssh-agent</code> если вы хотите защитить свои ключи парольной фразой.</p>

<pre><code>$ sudo apt-get install sshpass $ sshpass -p your\_password ssh user@hostname </code></pre>

<p>хотя правильный ответ на ваш вопрос <strong> sshpass </strong> ( <a href="https://serverfault.com/questions/241588/how-to-automate-ssh-login-with-password#512220">подробности см. в другом ответе</a> ), существует более безопасный способ - ssh ключи. вы просто <strong> три простых шага </strong> от решения:</p><p>введите следующую команду, чтобы начать создание <strong> пары ключей rsa </strong>:</p><pre><code># ssh-keygen </code></pre><p>когда появится сообщение "введите файл для сохранения ключа", просто оставьте имя файла пустым, нажав enter.</p><p>когда терминал попросит вас ввести фразу-пароль, просто оставьте это поле пустым и нажмите enter.</p><p>затем скопируйте пару ключей на сервер с помощью <strong> одной простой команды </strong>:</p><pre><code># ssh-copy-id userid@hostname </code></pre><p>теперь вы можете войти <strong> без пароля </strong>:</p><pre><code># ssh userid@hostname </code></pre>

<p>используйте ожидайте:</p><pre><code>#!/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 </code></pre><p>пример:</p><pre><code># ./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 </code></pre>

<p>я удивлен, что никто не упомянул <code>plink</code> из <code>putty-tools</code> пакет в ubuntu:</p><pre><code>plink user@domain -pw mypass [cmd] </code></pre><p>он также доступен в windows, и его синтаксис в основном совместим с клиентом openssh.</p>

<p>это может быть бесполезно для вас, но вы можете сделать это с помощью perl:</p><pre><code>\#!/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! $!"; 

единая регистрация ssh обычно достигается с помощью аутентификации с открытым ключом и агента аутентификации. вы можете легко добавить свой тест vm к существующему агенту аутентификации (см. пример ниже). другие методы, такие как gssapi/kerberos, существуют, но являются более сложными.sshpassв ситуациях, когда password является единственным доступным методом аутентификации, <a href="https://linux.die.net/man/1/sshpass">sshpass может использоваться для автоматического ввода пароля. обратите особое внимание на <strong> соображения по безопасности </strong> в разделе <a href="https://linux.die.net/man/1/sshpass">man-страница . во всех трех вариантах <strong> пароль виден или хранится в незашифрованном виде в некоторый момент </strong>:анонимный канал (рекомендуется 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, возможно, проще с языками программирования. другой процесс может подключиться к вашему каналу/fd до того, как будет написан пароль. окно возможностей довольно короткое и ограничено вашими процессами или корнем.переменная среды# 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//environ | tr '0' 'n' | grep ^sshpass=). окно возможностей намного длиннее, но все еще ограничено вашими собственными процессами или корнем, а не другими пользователями.аргумент командной строки (наименее безопасный) sshpass -p my_secret_password ssh user@host это удобно, но менее безопасно, как описано на странице руководства. аргументы командной строки видны всем пользователям (например, ps -ef | grep sshpass). sshpass пытается скрыть аргумент, но все равно есть окно, в течение которого <strong> все пользователи </strong> могут видеть ваш пароль переданным аргументом.примечаниеустановите для bash <a href="https://www.gnu.org/software/bash/manual/html_node/bash-variables.html#index-histcontrol">переменная 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 преимущество заключается в том, что ваш закрытый ключ зашифрован, и вам нужно ввести его пароль только один раз (с помощью более безопасного метода ввода).

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

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

я предпочитаю passh <a href="https://github.com/clarkwang/passh">https://github.com/clarkwang/passh sshpass не работает по дизайну.когда сервер ssh не добавлен уже в мой known_hosts, sshpass не покажет мне сообщение о добавлении сервера к моим известным хостам, passh не имеют этой проблемы.вход на удаленный сервер:$ passh -p password ssh user@host </code></pre>