Linux login 自动登录,Linux shell实现ssh自动登录

最近换了Linux系统做自己的开发环境,由原来的Windows换成了ubuntu 16.04,但是也碰见了一些问题。因为自己的开发机和测试环境以及线上环境都是通过跳板机连接的,以前远程登录都是用Xshell。但是换成了Linux 就不需要xshell了.我们可以通过ssh做远程的自动登录。

由于ssh基于用户名和密码进行校验,同时的我们的跳板机也要进行秘钥的校验,所以先看一下ssh命令的主要说明:

usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]

[-D [bind_address:]port] [-E log_file] [-e escape_char]

[-F configfile] [-I pkcs11] [-i identity_file] [-L address]

[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]

[-Q query_option] [-R address] [-S ctl_path] [-W host:port]

[-w local_tun[:remote_tun]] [user@]hostname [command]

我主要关注几个参数: -p ssh的端口 一般是22

-i 秘钥文件

由于登录跳板机有好几次交互,所以采用expect去做,expect是一种类似bash的脚本。默认装机不会自带,这里在ubuntu下:

sudo apt-get install expect

就可以了。

安装好之后开始写脚本:

#!/usr/bin/expect -f

set ip [lindex $argv 0]

spawn ssh -i ./zhiming.pem zhiming@10.0.0.51 -p 50005

expect "*zhiming*"

send "8C4TTa7k4vhMphc1\r"

expect "*Opt or IP*"

send "$ip\r"

interact

其实可以看出来,和bash是有明显区别的。

首先,不能声明bash做脚本的解析,需要声明成!/usr/bin/expect

接下来对于参数获取,不能使用$1,$2...而是必须用set ip [lindex $argv 0]这种语法去做,不难理解,因为毕竟不是bash嘛。

接下来呢用到了一个命令spawn,spawn用来新开启一个进程去执行ssh登录。

对于执行ssh之后的返回结果,我们有一个”期望“ expect 这里支持通配符,就是我想问它是否包含字符串“zhiming”。

如果包含,那么我用send命令向远端发送我的密码,其实上一步就是提示要输入密码。

接下来我在交互,期望得到下一步的操作提示,那么我期望是包含“Opt or IP”

接下来我就要输入我期望的目标ip, 其实就是之前的set的ip这个参数。

最后一步很关键,interact,主要实现的是允许fork的子进程可以交互,如果没有interact,那么即使登录成功了过一会儿也会自动退出。

一个简单的ssh的远程登录操作就结束了,其实很简单。但是对我平时的使用确是意义非凡。因为我再也不用可以的去记密码了。当然上面还有很多漏洞,没有对极端的情况做出判断,但是对平时的使用是足够了。

通过换了操作系统,我意识到,所有的东西都能用脚本去搞定,不仅方便还能学会很多东西。强烈建议Windows的coder赶紧扑进mac的怀抱,没钱可以上ubuntu。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值