需求
在linux系统上登陆实验室的服务器,由于需要通过ssh登陆,每次都要手动输入相关信息会比较麻烦,于是考虑使用expect结合ssh实现自动化的登陆方式,同时保留端口转发,可以实现tensorboard的图像查看。
设备
系统:Ubuntu 20.04
expect
expect是一个用来处理交互的命令。借助expect,我们可以将交互过程写在一个脚本上,使之自动化完成。ssh登录,ftp登录等都符合交互的定义。
expect是交互性很强的脚本语言,但是expect依赖于tcl,但linux系统里一般不自带安装tcl,需要手动安装。
1.首先检查tcl
whereis tcl
2.下载安装包
tcl版本 8.4.19
http://sourceforge.net/projects/tcl/files/Tcl/8.4.19/tcl8.4.19-src.tar.gz/download
except版本5.45
http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz
3.解压后安装
- 安装tcl
sudo ./configure
sudo make
sudo make install
- 安装expect
sudo apt install expect
(直接apt安装成功,所以没有使用安装包的安装方式)
4.配置ssh文件
ssh -L PORT:IP:PORT root@IP # ssh实现端口映射
set timeout 设置超时
spawn:启动新的进程
expect:从进程接收字符串
send:用于向进程发送字符串
interact:允许用户交互
总结
至此,在终端内运行相应的.sh文件就可以实现自动连接服务器、填写登陆密码、端口映射的功能。
不过,如果存在多个端口需要映射,此方法就需要启动多个终端。
Ref
https://blog.csdn.net/shimadear/article/details/93972559
https://blog.csdn.net/evglow/article/details/103080173
https://qastack.cn/programming/29936948/ssh-l-forward-multiple-ports