如何在Shell脚本中使用ssh命令?

3
我知道我们应该执行ssh user@target,但是在哪里指定密码呢?
谢谢大家的回复。我的要求是必须在不同的机器上启动一些服务器。所有服务器都应该由一个shell脚本启动。输入密码似乎有点麻烦,但我想我只能采取这个选项。我不想保存公钥的原因之一是我可能不会每次连接到相同的机器。虽然很容易返回并修改脚本以更改目标地址。

我有点困惑:如果你的密钥都在各自的机器上,那么就有可能在不需要密码的情况下调用它们(假设你没有将口令与密钥关联)。这并不意味着你必须连接到每台安装了密钥的机器。 - wlangstroth
6个回答

6

最好的方法是生成一个私钥/公钥对,并将您的公钥存储在远程服务器上。这是一种安全的登录方式,无需每次输入密码。 点击此处了解更多


对于使用Windows的用户,我推荐使用“putty”工具集。在这种情况下,pageant工具将处理密钥管理。pglombardo提供了在*nix上使用公钥身份验证的概述。我已经在Linux上多次设置过这个,有时可能会遇到一些挑战。如果您在设置过程中遇到特定问题,请在此处发布它们。 - RyanHennig
我认为链接有问题。 - ComputerScientist

2
出于安全考虑,这不能通过简单的ssh命令完成。如果您想使用ssh密码路线,则以下链接显示了一些脚本,可以绕过此问题(如果您坚持使用): 自动输入密码的脚本

2
ssh命令会提示输入密码。在命令行中指定密码是不安全的,因为执行的完整命令通常是可见的(例如ps aux),并且以纯文本形式保存在您的命令历史文件中。任何良好编写的程序(包括ssh)都会在必要时提示输入密码,并禁用电传回显,以便它不会在终端上可见。
如果您正在尝试从cron或后台执行ssh,请使用ssh-agent

2
我过去做这件事的方法就是设置一对认证密钥。
这样,您可以在不必指定密码的情况下登录,并且它适用于shell脚本。这里有一个很好的教程:

http://linuxproblem.org/art_9.html


1

SSH密钥是标准/建议的解决方案。 必须为将运行脚本的用户设置密钥。

对于该脚本用户,请查看您是否在~/.ssh/中设置了任何密钥(密钥文件将以.pub扩展名结尾)

如果您没有设置任何密钥,则可以运行:

ssh-keygen -t rsa

这将生成~/.ssh/id_rsa.pub文件(-t选项还有其他类型)

然后,您可以将此文件的内容复制到远程计算机上的~(remote-user)/.ssh/authorized_keys中。

作为脚本用户,您可以通过以下方式测试它是否有效:

ssh remote-user@remote-machine

您应该无需密码提示即可登录。

同样,在您的脚本从该用户运行时,它可以自动SSH到远程机器。


0

如果你真的想使用密码认证,可以尝试使用expect。请参考这里的示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接