Bash:控制SSH

时间:2009-12-17 20:45:26

标签: bash ssh controls

我有这个bash文件,它要求为设备提供OpenSSH的IP,密码等。

现在,如果我使用ssh root@ip,我必须输入密码。这真的很烦人。其次;我不能让我的脚本发送命令。

这就是我想要的 - >

  1. 不是密码的东西;我已经找到了一些东西但它告诉我找不到命令?:

    #!/usr/bin/expect -f

    spawn ssh root@$IPADDR

    expect "password:"

    sleep 1

    send "$rpass\r"

    1. 我希望用户能够看到一些可供选择的菜单;之后;每个命令都是为他完成的。那么就像一个新窗口,或类似的东西?

    2. 我不想用: - 任何外部的东西 - 无需额外编辑SSH连接

  2. BASH INFO:GNU Bash,v.4.0.33(1)-release(i486-pc-linux-gnu),在Linux Mint上运行。但它必须可用于几个Linux发行版,还可以在Mac上使用?

8 个答案:

答案 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密钥密码请求。