不使用 expect 实现自动化 ssh 密码认证
2018-01-08 16:13
330 查看
网上ssh免认证大部分都是跟expect配合使用,但很多时候expect还需要另外安装,不太方便。终于发现一种简便方法,配合ssh-copy-id使用效果更佳.
原文:http://xiezhenye.com/2014/08/不使用-expact-实现自动化-ssh-密码认证.html
一般来说,自动化通过 ssh 执行操作或者通过 scp 传文件首先得过 ssh 认证这一关。采用公钥认证是最方便安全的方式。但是有时候不得不使用密码认证。而 ssh 默认是直接读写终端来输出提示信息和读入密码的,所以没法直接用 echo password | ssh … 的方式来认证。expect 是最常用的用于解决这类问题的工具。但是这玩意实在是很不好用,也不能保证一定安装过。
好在 ssh 还是开了一扇窗,让我们可以实现这点。ssh 有个环境变量,SSH_ASKPASS ,设置了这个环境变量,并且当前会话不是终端时,ssh 在认证时会启动这个程序,从这个程序的标准输出来读取密码。这个功能本来是用于图形终端的,所以还要设置另一个环境变量 DISPLAY=’none:0’,让 ssh 不要试图访问 X11 。至于让进程脱离终端,使用 setsid 就可以了。下面这个例子就展示了自动化实现密码认证并执行命令。
例子里的 /root/pswd.sh 只需要简单输出密码,并确保当前用户可执行就可以了。比如
setsid env SSH_ASKPASS='/root/pswd.sh' DISPLAY='none:0' ssh-copy-id root@192.168.1.2
原文:http://xiezhenye.com/2014/08/不使用-expact-实现自动化-ssh-密码认证.html
一般来说,自动化通过 ssh 执行操作或者通过 scp 传文件首先得过 ssh 认证这一关。采用公钥认证是最方便安全的方式。但是有时候不得不使用密码认证。而 ssh 默认是直接读写终端来输出提示信息和读入密码的,所以没法直接用 echo password | ssh … 的方式来认证。expect 是最常用的用于解决这类问题的工具。但是这玩意实在是很不好用,也不能保证一定安装过。
好在 ssh 还是开了一扇窗,让我们可以实现这点。ssh 有个环境变量,SSH_ASKPASS ,设置了这个环境变量,并且当前会话不是终端时,ssh 在认证时会启动这个程序,从这个程序的标准输出来读取密码。这个功能本来是用于图形终端的,所以还要设置另一个环境变量 DISPLAY=’none:0’,让 ssh 不要试图访问 X11 。至于让进程脱离终端,使用 setsid 就可以了。下面这个例子就展示了自动化实现密码认证并执行命令。
echo 'echo BEGIN!; ls /' | setsid env SSH_ASKPASS='/root/pswd.sh' DISPLAY='none:0' ssh root@127.0.0.1 2>&1 Pseudo-terminal will not be allocated because stdin is not a terminal. BEGIN! bin boot etc home lib
例子里的 /root/pswd.sh 只需要简单输出密码,并确保当前用户可执行就可以了。比如
#!/bin/bash echo 'PASSWORD'
相关文章推荐
- 使用expect实现ssh不输入密码登录远程服务器
- SSH使用expect实现密码交互脚本
- 使用expect实现ssh自动输入密码,从而自动登陆Linux
- 使用expect在linux中实现一些自动化工作
- 使用ssh公钥实现ssh免密码登录
- sync,ssh,expect配合使用备份不需要输入密码
- Linux下SSH使用rsa认证方式省去输入密码
- 服务器间通过ssh使用密钥对实现无密码登录
- Nginx Http认证 实现访问网站或目录密码认证保护 | 使用 HttpAuthBasicModule 模块
- expect实现自动化模拟输入scp/ssh
- expect 的灵活使用,实现自动拷贝 /root/.ssh/authorized_keys
- 使用expect自动输入ssh密码
- 如何使用WinINet接口实现Youtube用户名密码认证
- 使用expect实现ssh自动交互
- 使用expect实现批量操作的自动化
- 使用ssh公钥实现ssh免密码登录
- expect实现自动化模拟输入scp/ssh
- Linux下SSH使用rsa认证方式省去输入密码
- 使用expect 实现 scp 文件的时候不手动输入密码
- linux下使用expect实现自动化脚本