在我的 Python3 脚本中,我尝试使用 Paramiko ssh 到远程设备。我可以做到这一点。问题是
ssh
将我转入专有 shell。我需要将 -t bash
添加到 .connect
命令中以将我转储到 bash shell 中。这是我所拥有的有效方法:
ssh_tranfer = paramiko.SSHClient()
ssh_transfer.set_missing_host_key_policy(paramiko.AutoAddPolicy)
ssh.connect(hostname=device, port=22, username=username, key_filename=private_key_name)
有了这个,我可以很好地连接,但就像我说的,我处于专有 shell 中,无法传递命令。我什至不确定我是否可以这样做。
我在上面显示的
ssh.connect
之前定义了我正在使用的所有参数(即设备、用户名和私钥)。
如果我直接从计算机通过 ssh 进入设备并直接进入 bash shell,我会使用:
ssh username@device.com -t bash
我想找到一种使用 paramiko 来做到这一点的方法。
感谢您的帮助!
-t
中的bash
+ ssh
做了两件事:
bash
(而不是启动“shell”通道,ssh
默认执行的操作)。-t
强制进行交互式会话,这是“shell”的默认设置,但默认情况下对“exec”禁用。
为此,请将 get_pty=True
传递给 SSHClient.exec_command
。强制性警告:请勿以这种方式使用
AutoAddPolicy
– 这样做您将失去针对 MITM 攻击的保护。正确的解决方案请参阅Paramiko“未知服务器”。