自动 ssh 隧道

自动 ssh 隧道

我正在寻找一种简单的方法来自动化我的 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>在相应密钥的行中一样。

相关内容