您可以在 .ssh/config 中设置密码以允许自动登录吗?

您可以在 .ssh/config 中设置密码以允许自动登录吗?

我正在使用 Ubuntu 11.10,ssh每天要连接许多服务器,因此我将它们的参数放在文件中,.ssh/config如下所示:

Host Home
User netmoon
Port 22
HostName test.com

有没有办法将每个连接的密码放在这个文件中,以便当服务器要求输入密码时,终端输入其密码并将其发送到服务器?

我需要这个,因为有时我离开电脑,当我回来时,输入密码,然后按下Enter终端显示CONNECTION CLOSED

PS我不想使用公钥/私钥对。

答案1

用安全性换取便利永远不会有好结果……

您可以ssh-copy-idopenssh-client包装中使用吗?

man ssh-copy-id

ssh-copy-id 是一个使用 ssh 登录远程机器并将指示的身份文件附加到该机器的 ~/.ssh/authorized_keys 文件的脚本。

答案2

如果您确实不想使用公钥/私钥对,您可以编写一个expect脚本,根据目标地址自动为您输入密码。

编辑:我的意思是,您可以编写一个脚本,一方面,使用它expect为您输入密码,另一方面,从配置文件中读取给定用户和主机的密码。例如,以下 Python 脚本适用于晴天场景:

#!/usr/bin/python                                                                                                                        
import argparse
from ConfigParser import ConfigParser
import pexpect

def main(args):
    url = args.url
    user, host = url.split('@', 1)

    cfg_file = 'ssh.cfg'
    cfg = ConfigParser()
    cfg.read(cfg_file)
    passwd = cfg.get(user, host)

    child = pexpect.spawn('ssh {0}'.format(url))
    child.expect('password:')
    child.sendline(passwd)
    child.interact()

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Run ssh through pexpect')
    parser.add_argument('url')
    args = parser.parse_args()
    main(args)

配置文件格式如下:

[user_1]
host1 = passwd_1
host2 = passwd_2

[user_2]
host1 = passwd_1
host2 = passwd_2

注意:如上所述,python 脚本需要更加复杂才能处理来自 ssh 的所有可能错误和问题消息以及所有可能的 URL(在示例中,假设它将类似于user@host,但用户部分大多数时候都不会使用),但基本思想仍然相同。关于配置文件,您可以使用不同的配置文件或使用.ssh/config并编写自己的代码来解析该文件并获取给定用户和主机的密码。

答案3

那么ProxyCommand怎么样:

Host Home-raw
    HostName test.com
Host Home
   User netmoon
   Port 22
   ProxyCommand sshpass -pmypass ssh netmoon@%h-raw nc localhost %p

ssh -W您也可以使用nc

ProxyCommand sshpass -pmypass ssh netmoon@%h-raw -W localhost:%p

答案4

不,恐怕这是不可能的。

唯一真正的选择是使用私钥,但你说过你不想这样做(为什么不呢?)。

相关内容