我有这个bash文件,它要求为设备提供OpenSSH的IP,密码等。
现在,如果我使用ssh root@ip
,我必须输入密码。这真的很烦人。其次;我不能让我的脚本发送命令。
这就是我想要的 - >
不是密码的东西;我已经找到了一些东西但它告诉我找不到命令?:
#!/usr/bin/expect -f
spawn ssh root@$IPADDR
expect "password:"
sleep 1
send "$rpass\r"
我希望用户能够看到一些可供选择的菜单;之后;每个命令都是为他完成的。那么就像一个新窗口,或类似的东西?
我不想用: - 任何外部的东西 - 无需额外编辑SSH连接
BASH INFO:GNU Bash,v.4.0.33(1)-release(i486-pc-linux-gnu),在Linux Mint上运行。但它必须可用于几个Linux发行版,还可以在Mac上使用?
答案 0 :(得分:15)
在没有在机器上以明文形式存储密码的情况下,正确的方法是使用ssh。首先运行:
SSH-密钥生成
这将在~/.ssh/id_rsa.pub
中生成新的SSH密钥。之后只需运行:
ssh-copy-id user@my.server.com
如果您使用的是OS X或其他没有“ssh-copy-id”的计算机,则会有一行alternatives,例如:
cat~ / .ssh / id_rsa.pub | ssh user @ machine“mkdir~ / .ssh; cat>>〜/ .ssh / authorized_keys”
最终,您只需将本地计算机上~/.ssh/id_rsa.pub
的内容附加到远程服务器上的~/.ssh/authorized_keys
即可。你如何做到这一点取决于你,以上只是快速捷径。
答案 1 :(得分:3)
许多工具可以不遗余力地阻止您正在做的事情。我建议使用ssh公钥来解决此问题,而不是密码。
最大的选择是根据开源编写自己的修改后的ssh客户端,以便控制密码管理。
哦,好吧,我忘记了。你可以用pty来表达这一点,因为/ dev / tty将是你控制的。期待可能会帮助你。
答案 2 :(得分:2)
Expect是自动化交互式会话的常用工具。
答案 3 :(得分:2)
正确的方法是复制密钥,如此处所述。要在对话中添加内容,有时候sshpass
可以很方便。
该问题具体要求在使用SSH的系统中编写脚本。如果是嵌入式系统的开发,将sshpass
与命令行选项结合起来会很有用,因为它在这篇文章中读到了
sshpass -p raspberry ssh pi@192.168.0.145
这可以与
结合使用ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no pi@192.168.0.145
以避免阻止脚本发生的确认问题。
同样,只在不同机器共享IP并且安全性不重要的开发系统中使用它。
https://ownyourbits.com/2017/02/22/easy-passwordless-ssh-with-sshh/
答案 4 :(得分:1)
使用ssh-keygen为您的计算机创建公钥,然后将您的本地~/.ssh/id_rsa.pub
或~/.ssh/identity.pub
复制到~/.ssh/authorized_keys
中的远程系统。
您可能需要收紧authorized_keys文件的权限:chmod 600
答案 5 :(得分:1)
您考虑过Paramiko了吗?它是一个用于与SSH交互的Python库。
答案 6 :(得分:1)
即使我会使用pem键这是一个老话题,我也想引用sshpass
答案 7 :(得分:0)
您可以使用以下脚本:https://github.com/aprey10/ssh-authorizer
它还允许跳过ssh密钥密码请求。