paramiko connect 时候遇到的问题。

2016-10-25 17:13:38 +08:00
 fxxkgw

如果 Linux 服务器密码过期了, ssh 时候会有下面提示:

You are required to change your password immediately (password aged)
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user XX.
Changing password for XX.
(current) UNIX password: ###卡在这里等着输入密码

当用 python 的 paramiko 模块通过用户名 密码登录时
s = paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect(host,port,user,pwd)###这个地方并没有任何报错
s.exec_command(cmd, get_pty=True, timeout=500) #这个地方因为密码过期了,会卡住直到超时报错

现在想在 s.connect 这个地方做个检测,如果碰到密码过期就返回错误,翻了参数也没发现有控制的地方,请教有什么好的处理方式么。
3973 次点击
所在节点    Python
2 条回复
KIDJourney
2016-10-26 10:26:14 +08:00
exec_command 的时候把 stdin 和 stdout 拿出来,读一下 stdout ,密码过期的话用把新密码打到 stdin 里就行。

参见[How to sudo in para]( http://stackoverflow.com/questions/6270677/how-to-run-sudo-with-paramiko-python)
eyp82
2016-10-28 07:30:29 +08:00
我觉得配置 ssh 无密码登陆不是更好一些? 不需要你脚本里记录密码, 另外也不需要考虑密码过期的问题了.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/315375

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX