如何使用 Paramiko SSH 到需要雙密碼身份驗證的服務器?使用特定用戶時,它首先提示輸入用戶密碼,然后提示輸入另一個密碼,因此我的會話需要是交互式的。我已經(jīng)使用 pexpect 模塊ssh在 Linux上生成了一個進程,但由于我無法在 Windows 中執(zhí)行此操作,因此我需要一種使用 Paramiko的方法來執(zhí)行此操作。服務器是我們的產(chǎn)品,是對 CentOS 稍作修改的版本。我正在編寫自動化代碼來測試一些需要我通過 ssh 進入服務器并驗證一些命令的功能。我能夠以 root 用戶身份登錄,但對于我感興趣的用戶,它要求輸入第二個密碼。我無法執(zhí)行這樣的命令:ssh -vvv -p2222 nobrk1n@10.213.23.112 ls執(zhí)行上述命令時,系統(tǒng)會提示我輸入 nobrk1n 用戶的密碼。但是在輸入密碼時它會卡住。我已將上述命令的輸出粘貼到https://pastebin.com/hSfiCmdi。通常我首先使用 ssh 進入服務器ssh -p2222 user@host,當建立連接并成功登錄時,我開始執(zhí)行命令。
1 回答

紫衣仙女
TA貢獻1839條經(jīng)驗 獲得超15個贊
您的服務器對第一個密碼使用標準密碼身份驗證。
只有在 shell 啟動時才詢問第二個密碼。簡單的 I/O 就是用來做這個的。
此外,您的服務器似乎不支持“exec”接口/通道來執(zhí)行命令(因為ssh user@host command不起作用)。什么可能與“shell 密碼”功能有關(guān)。所以你可能必須使用“shell”通道來執(zhí)行你的命令,否則不推薦。
ssh = paramiko.SSHClient()
ssh.connect(hostname, username = username, password = password1)
channel = ssh.invoke_shell()
channel.send(password2 + "\n")
channel.send(command + "\n")
while not channel.recv_ready():
time.sleep(1)
out = channel.recv(9999)
添加回答
舉報
0/150
提交
取消