![通过 Bash 脚本建立永久 SSH 连接?](https://linux22.com/image/485101/%E9%80%9A%E8%BF%87%20Bash%20%E8%84%9A%E6%9C%AC%E5%BB%BA%E7%AB%8B%E6%B0%B8%E4%B9%85%20SSH%20%E8%BF%9E%E6%8E%A5%EF%BC%9F.png)
我有两台 OpenSolaris 服务器。远程服务器有一个 MySQL 数据库。MySQL 配置了 skip-networking;因此,我无法仅使用主机名和端口从第一台服务器访问该数据库。
我必须设置 ssh 隧道才能从本地服务器连接到 MySQL。我可以用一个简单的命令来做到这一点:ssh -L 3350:localhost:3306 user@server 和 SSH 密钥。效果很好。
但是,我需要连接是永久的,并且最好在启动时运行。
我创建了一个小的 bash 脚本来创建连接。但是,它只是连接,结束脚本,然后丢失 ssh 连接。如果我修改脚本以在远程服务器上运行命令和 sleep 命令,它将保持连接 X 秒。然后我可以连接到 MySQL。但是,我肯定会在 X 秒后丢失连接。
有人有更优雅的方法吗?有没有办法使用 Solaris 的 svcadm 来创建连接并始终保持连接?
更新:我发现,如果我添加 sleep X,然后在 X 过期之前创建 MySQL 连接,则 ssh 连接将无限期保持打开状态。但是,这不是一个非常稳定的解决方案。如果我丢失了数据库连接,ssh 连接就会断开,然后我就无法再次连接。
答案1
您需要 OpenSSH 的 -N 选项。例如:
ssh -N -L 3350:localhost:3306 user@server &
答案2
您需要查看 autossh 之类的工具,它可以保持 ssh 隧道正常运行。如果隧道停止运行,它会自动重新创建隧道。
答案3
我认为你可以尝试 ssh-copy-id - 允许轻松传播 SSH pub/priv 密钥对
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
答案4
如果您想避免 ssh、加密、身份验证等开销,您可以使用 netcat(或 nc)执行非常类似的操作。网上有很多教程。如果您从这些教程开始,并且需要更具体的帮助,请告诉我。