Bash:控制 SSH

问题描述 投票:0回答:8

我有这个 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 连接

BASH 信息:GNU Bash,v.4.0.33(1)-release (i486-pc-linux-gnu),在 Linux Mint 上运行。但它必须适用于多个 Linux 发行版,并且也适用于 Mac?

bash ssh controls
8个回答
17
投票

无需在计算机上以明文形式存储密码即可执行此操作的正确方法是使用 ssh。第一次运行:

ssh-keygen

这将在

~/.ssh/id_rsa.pub
中生成新的 SSH 密钥。之后只需运行:

ssh-copy-id [电子邮件受保护]

如果您使用的是 OS X 或另一台没有“ssh-copy-id”的计算机,则有单行 替代方案,例如:

cat ~/.ssh/id_rsa.pub | ssh user@machine "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

最终您只需将本地计算机上的

~/.ssh/id_rsa.pub
的内容附加到远程服务器上的
~/.ssh/authorized_keys
即可。如何执行此操作取决于您,以上只是执行此操作的快速快捷方式。


3
投票

许多工具会竭尽全力阻止您正在做的事情。我建议使用 ssh 公钥而不是密码来解决这个问题。

最好的选择是基于开源编写自己修改的 ssh 客户端,以便控制密码管理。

哦,好吧,我忘了。您可能可以使用 pty 来智取它,因为那时 /dev/tty 将由您控制。

expect
可能会帮助你。


2
投票

Expect 是自动化交互式会话的常用工具。


2
投票

正确的方法是按照此处所述复制密钥。要在对话中添加一些内容,有时

sshpass
会很方便。

该问题专门询问有关在使用 SSH 的系统中编写脚本的问题。如果是嵌入式系统的开发,将

sshpass
与命令行选项结合起来会很有用,正如本文中所读到的那样

sshpass -p raspberry ssh [email protected]

这可以与

结合使用
ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]

以避免出现阻止脚本编写的确认问题。

再次强调,仅在不同机器共享 IP 并且安全性并不重要的开发系统中使用此功能。

https://ownyourbits.com/2017/02/22/easy-passwordless-ssh-with-sshh/


1
投票

使用 ssh-keygen 为您的计算机创建公钥,然后将本地

~/.ssh/id_rsa.pub
~/.ssh/identity.pub
复制到远程系统,位于
~/.ssh/authorized_keys

您可能需要收紧authorized_keys文件的权限:chmod 600


1
投票

您考虑过Paramiko吗?它是一个用于与 SSH 交互的 Python 库。


1
投票

即使我为此使用 pem 密钥并且这是一个老话题,我也想引用 sshpass


0
投票

您可以使用此脚本:https://github.com/aprey10/ssh-authorizer

它还允许跳过 ssh 密钥密码请求。

© www.soinside.com 2019 - 2024. All rights reserved.