我是一名计算机科学专业的学生,仍然在学习很多东西,所以如果我不能完全理解我在这里尝试的内容,请耐心等待。
我在 Mac 上,连接到 Linux 机器。我可以通过执行以下脚本行来设置 ssh 隧道并连接到远程机器:
ssh -f -L 2222:<remote_machine>:22 <user>@<remote_server> sleep 10; ssh -p 2222 <user>@localhost
我想要做的是以某种方式自动执行此行。现在,我必须将其复制并粘贴到终端中。我已经设置了密钥对,因此不必输入密码,但我得到了终端类型的提示。这是我想消除的两个步骤,因此我可以打开终端并运行一个消除这两个步骤的脚本。
我不知道该如何响应“终端类型”提示或自动响应它。我尝试过 Expect 类和 Python 的 pexpect 模块,但没有成功(似乎 expect 脚本可以处理终端部分,但在创建隧道和不丢失对后台进程的引用方面遇到了麻烦)。
我有一个可以做我想做的事情的 applescript,但想要一个更便携的解决方案。任何关于去哪里找的建议都很好!
答案1
您可以将此命令放在以下列内容开头的普通文本文件中
#!/bin/bash
ssh -f -L 2222:<remote_machine>:22 <user>@<remote_server> sleep 10; ssh -p 2222 <user>@localhost
然后将其标记为可执行文件,它应该通过双击启动
有关 OS-X 上的 Shell 脚本的更多信息,请参阅此处
答案2
最简单的方法是为该命令创建一个别名。将以下行添加到您的$HOMe/.bashrc
文件中:
alias tunnel='ssh -f -L 2222:<remote_machine>:22 <user>@<remote_server> sleep 10; ssh -p 2222 user@localhost'
然后,您将能够通过运行以下命令从普通终端启动隧道:
tunnel