我正在寻找一种简单的方法来自动化我的 ssh 隧道。
基本上,我想要一个本地守护进程来监听一系列本地端口。如果一个程序向该端口发送流量,守护进程应该启动一个 SSH 隧道并转发该隧道。同时,该隧道应该在一定时间没有活动后过期并关闭连接,直到下次发出请求。
到目前为止,我见过的大多数解决方案都试图保持隧道畅通。然而,我只希望隧道仅在需要时自动存在。
答案1
您可以使用 launchctl 脚本并将其添加到/System/Library/LaunchAemons/smtp.plist
。我目前正在使用它来自动设置用于发送电子邮件的 ssh 隧道。然后脚本看起来例如:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>HOST.smtp</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/ssh</string>
<string>-q</string>
<string>-T</string>
<string>-i</string>
<string>/private/var/root/.ssh/smtpssh</string>
<string>USER@EMAILHOST</string>
</array>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>Bonjour</key>
<false/>
<key>SockServiceName</key>
<integer>PORT</integer>
<key>SockType</key>
<string>stream</string>
</dict>
</dict>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<false/>
</dict>
</dict>
</plist>
当然,您必须使用公钥认证才能实现这一点。.ssh/authorized_keys
您必须在文件中定义一个命令,如command="netcat smtp 25",no-X11-forwarding,no-agent-forwarding,no-port-forwarding <public key>
在相应密钥的行中一样。