题 如何使用密码自动SSH登录?


如何使用密码自动SSH登录? 我正在配置我的测试VM,因此不考虑严重的安全性。通过最少的配置选择SSH以获得可接受的安

EX)

echo password | ssh id@server

这不起作用。

我记得我用一些技巧引导我做了这件事,但我现在不记得我用过的伎俩......


332
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 新疆改造中心 六四事件 法轮功
非常重要的问题。我也需要一个答案,我的网站空间提供程序阻止将密钥文件放在服务器上,所以我必须传递没有密钥文件的密码。 - Radon8472


答案:


不要使用密码。生成无密码的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 如果你想尝试用密码来保护你的密钥。


296
2018-03-01 11:17



我终于决定使用密钥对了。因为我意识到这是最简单的方法。 - Eonil
@Eonil:不要在没有密码短语的情况下使用密钥。了解如何使用ssh-agent或pageant。 - Iain
这是一个很好的答案,但不是问题的正确答案。 - John Hunt
这些答案真的非常让我恼火。那不是问题。没人问如何使用密钥对。 - Matt Fletcher
这不回答这个问题。对于一个完全不同的问题来说,这是一个很好的答案,但对于那个被问到的问题来说,这很糟糕 - srchulo


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

495
2018-05-31 09:08



是的,有时你不能出于各种原因使用基于密钥的身份验证..例如,现在我不能在plesk服务器上使用keyauth,因为在盒子外面它没有启用,我没有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

56
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

25
2018-03-01 11:08



它工作但它不能打印远程机器的stdout。 - 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不正确。即使您不知道主机密钥,密钥身份验证也可以保护您免受mitm攻击。攻击者可以冒充服务器,但从不连接到真实服务器。使用密码验证,您连接的任何服务器(合法与否)都将看到密码。出于这些原因,没有密码的ssh密钥比仅将密码存储在文件中要安全得多。 - kasperd
这不是答案。 - Steve Bennett
@SteveBennett它与接受的答案相同,并在它之前发布,尽管它的细节较少。 - Michael Hampton♦
好吧,我会说接受的答案是对一个没有被问到的问题的正确答案。这不是什么。 - Steve Bennett


没有人提到我很惊讶 plink 来自 putty-tools Ubuntu中的包:

plink user@domain -pw mypass  [cmd]

它也可以在Windows上使用,语法主要与openssh客户端兼容。


4
2017-07-09 13:15



对于Windows你的答案是好的,不合时宜的linux / unix用户通常没有plink - Radon8472
它在 putty-tools 包 - eadmaster