寻一段 shell 来实现自动填写 ssh 登录密码

2018-09-11 20:35:13 +08:00
 kuoruan

非私钥公钥认证方式,仅通过写一段 shell 脚本,自动获取并调用 sshpass 输入密码,实现免输密码登录

网上找到的解决方案:

https://askubuntu.com/a/829837 https://github.com/Shmadul/easyssh

ssh config 文件类似于,通过注释的方式填入密码

Host host
    User root 
    #Password passwd
    HostName localhost
    Port 2222

原脚本:

#!/bin/bash

host=$1
password=`awk "/#Password/ && inhost { print \\\$2 } /Host/ { inhost=0 } /Host $host/ { inhost=1 }" ~/.ssh/config`

if [[ -z "$password" ]]; then
  /usr/bin/ssh $*
else
  sshpass -p $password /usr/bin/ssh $*
fi

但是测试之后无法正常获取到 host 对应的 Password,应该是 awk 语句有问题

希望各位能帮忙看看这 awk 应该怎么写,谢谢

7999 次点击
所在节点   Bash
9 条回复
zbinlin
2018-09-11 21:12:14 +08:00
#Password passwd 要紧接着 Host host
choury
2018-09-11 21:47:36 +08:00
这种需求我们一般都是用 expect 的
kuoruan
2018-09-11 22:26:10 +08:00
@zbinlin 答案的说明里边并没有说必须要密码挨着 host 写,但是挨着写的话确实就简单多了
kuoruan
2018-09-11 23:06:59 +08:00
自己用简单的方法,差不多实现了,就是不完美

```
#!/bin/sh

host=$1

if [ -z "$host" ]; then
echo "Usage: $(basename $0) [host] [...params]"
exit 128
fi

password="$(awk "/^\\s*Host\\s*$host\\s*#Password/ { print \$4 }" ~/.ssh/config | head -n1)"

ssh_path="$(which ssh)"
sshpass_path="$(which sshpass)"

if [ -z "$password" ]; then
"$ssh_path" $@
else
"$sshpass_path" -p "$password" "$ssh_path" $@
fi
```

然后 config 这么写

```
Host hostname #Password passwd
User root
...
```
Tink
2018-09-11 23:32:10 +08:00
expect
ant2017
2018-09-12 00:10:39 +08:00
配置文件没配好吧,比如 a.sh host1 参数 host1 在配置文件里配对了吗
thedrwu
2018-09-12 01:30:26 +08:00
```
pw=`grep '^\s*Host \|^\s*#\s*Password ' ~/.ssh/config | grep -1 "$hostname" | sed -n 's/^\s*#\s*Password\s*//p'`
````
thedrwu
2018-09-12 01:39:20 +08:00
@thedrwu

修改一下:

grep '^\s*Host\s\+\|^\s*#\s*Password\s\+' ~/.ssh/config | fgrep -1 "$host" | tail -1 | sed -n 's/^\s*#\s*Password\s\+//p'

虽然我也喜欢用 awk,然而有时候别的工具方便
zhangjn
2018-09-12 08:21:52 +08:00
还直接修改 openssh 的代码

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

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

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

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

© 2021 V2EX