如何使用 ssh 通过提供静态文本来执行与键盘交互的操作

Posted

技术标签:

【中文标题】如何使用 ssh 通过提供静态文本来执行与键盘交互的操作【英文标题】:How to use ssh to execute actions that are keyboard interactive by supplying static text 【发布时间】:2016-12-19 12:52:20 【问题描述】:

我正在编写一个 shell 脚本以使用 ssh 连接到基于 Linux 的远程机器

成功登录远程机器后,我可以执行 Linux 命令,现在我面临的真正问题是尝试为另一台需要本地身份验证的远程机器运行相同的脚本时(@987654325 @ 和password) 在ssh 登录后继续。

有人可以指导我如何用我的username 填写第一行并立即执行回车并为password 执行类似的操作。

我试过下面的代码connect.sh

sshpass -p <remote-passwd> ssh root@<remote-ip> 'bash -s' < test.sh

test.sh包含

ls
pwd

如果我运行connect.sh 脚本,它会完美执行而无需询问远程机器密码。它还执行lspwd

我真的可以用我的usernamepassword 替换lspwd 来实现我想要做的事情吗??

另外,我在寻找不可能的东西吗? (我在 VB.NET 中看到了类似的代码,它正在解决我的目的,但它不是一个健壮的代码,我真的对 VB scripts 没有任何想法)

更新:我能够以非交互方式登录远程机器,但远程机器环境立即要求本地身份验证再次需要键盘交互,我正在寻找非交互方式实现此身份验证

【问题讨论】:

确实可以通过SSH自动登录,检查***.com/questions/12202587/… 另请参阅write a shell script to ssh to a remote machine and execute commands。有关设置无密码访问的详细信息,请参阅:How to setup the passwords-less authentication between two different accounts @bdvll 我对这部分问题没问题,我的问题是在实现这个之后...... @prince 好的,那么您到底遇到了什么问题?您可以使用“期望”语法将传递的密码和用户名添加到您的 bashcript,然后运行您的命令。 您应该配置公钥身份验证,这样您就不必输入用户名和密码。 【参考方案1】:

如果可能,您应该在服务器上配置一个公钥,这样您就不必提供密码。这样更安全,会更直接地解决您的问题。

您可能还想研究编排框架,而不是自己实现这些。如果你做的是小事,Fabric 是一个不错的选择。如果这看起来会变得更大,您应该查看Ansible 之类的东西,它还可以处理系统配置和其他一百万件事,但只需很少的设置即可开始使用。

【讨论】:

感谢@Xiong,将检查您提供的输入。谢谢。

以上是关于如何使用 ssh 通过提供静态文本来执行与键盘交互的操作的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE---与用户交互---获取键盘输入

什么是winscp

什么是winscp

事件:事件类型

(31)sed命令完全攻略

在 Paramiko 中运行交互式命令