使用公钥不一定好使(有的设备好使), 这个时候可以使用 expect 脚本补充一下

SSH公钥登录

这个之前已经介绍过了, 请移驾: SSH免密码登陆(公钥认证)

大致分2步:

  • 创建秘钥/公钥
  • 拷贝公钥到目标服务器

如果不好使, 可以先检查一下目标机器的目录权限: SSH免密码登陆(公钥认证)-目录权限设置

# 目标机器目录权限重置
$ chmod 750 $HOME
$ chmod 700 $HOME/.ssh
$ chmod 600 $HOME/.ssh/authorized_keys

Cydia 安装了 syslogd 之后查看 sshd 日志: tail -200 /var/log/syslog | grep sshd

放个大招: 一条命令搞定 (2018.10.04 补充)

# 1. 重置 $HOME 目录权限; 2. 删除 .ssh 目录后再重新创建; 3. 重新导入公钥;
$ ssh root@192.168.7.191 'chmod 750 $HOME && rm -rf .ssh && mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

Expect自动填充密码

这里重点介绍一下 expect 自动交互脚本, 常见的应该就是自动填充登录密码了吧

安装 expect:

# 快捷安装
$ brew install expect

SSH自动填充密码登录脚本:iphone.expect

#!/usr/bin/expect
#author:xu3352@gmail.com
#desc: ssh iphone device with the same password

set PASSWD  "alpine"
set IP_LAST [lindex $argv 0]

spawn ssh root@192.168.7.$IP_LAST
expect "*password:"
send "$PASSWD\r"
expect "*#"
interact

由于内网 ip 会变化, 但是 ip 的前3端是固定的, 所以直接写死, 最后一位用参数的方式传过去; 这个语法和 Base 脚本有些差别的

使用示例:(自动填充密码)

$ iphone.expect 124
spawn ssh root@192.168.7.124
root@192.168.7.124's password:
iPhone:~ root# 

这样也不用每次输入密码了

其他

  • SSH 公钥的方式是最安全和高效的;
  • expect 脚本是自动填充密码的, 但是密码是明文的, 不是很安全;
  • 此两种方式同样适用于其他 Linux 服务器

参考:



blog comments powered by Disqus

Published

12 September 2018

Tags