#!/bin/sh
/usr/bin/expect << EOF
spawn ssh -C -f -N -g -L 40010:10.11.1.103:20005 qrcode@localhost
expect {
"(yes/no)?" {
send "yes\r"
exp_continue
}
"password:" {
send "qrcode\r"
}
}
expect eof
EOF
这段代码是一个Bash脚本,用于通过SSH建立一个隧道(Tunnel)连接到远程服务器。该脚本中包含了一些Expect脚本,用于自动化处理SSH连接的过程,包括自动输入密码和处理连接确认等情况。
让我逐步解释脚本的功能:
1. `#!/bin/sh`: 这是一个shebang,指示脚本使用/bin/sh解释器执行。
2. `/usr/bin/expect << EOF`: 这是Bash脚本中的Here文档(Here Document)语法,用于将后续的文本作为输入传递给expect命令,直到遇到”EOF”(end of file)为止。
3. `spawn ssh -C -f -N -g -L 40010:10.11.1.103:20005 qrcode@localhost`: 在expect环境中,使用spawn命令启动一个SSH连接,并且通过隧道(Tunnel)将本地端口40010映射到远程服务器10.11.1.103的端口20005。连接的用户名是qrcode,连接的目标主机是localhost,即本地计算机。
4. `expect { … }`: 这是Expect脚本的开始。它设置一个匹配模式列表,以响应SSH连接期间可能遇到的不同情况。
a. `”yes/no)?”`: 当SSH连接时,可能会遇到首次连接远程服务器的确认信息,即服务器的公钥指纹(fingerprint)没有保存在本地计算机上时,会收到一个(yes/no)的确认提示。在这种情况下,脚本会自动发送”yes”,以确认连接,并继续等待其他情况的匹配。
b. `”password:”`: 如果连接需要密码,则会收到”password:”提示。在这种情况下,脚本会自动发送密码”qrcode”。
5. `expect eof`: 当SSH连接完成后,脚本会等待EOF(Here Document中的结束标记),表示所有Expect脚本都已执行完毕,然后退出。
综上所述,这段脚本主要目的是通过SSH建立到远程服务器的隧道,并自动处理连接时可能遇到的确认信息和密码输入。该脚本可以用于在本地计算机上设置一个SSH隧道,将本地端口映射到远程服务器的指定端口,以实现安全的网络连接。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/181586.html