abb*_*ood 10 networking linux ssh tunnel rds
我一直运行这两个命令以连接到受防火墙保护的 aws 上的 rds 实例(因此我通过 ec2 实例进行隧道传输),如下所示:
命令 1:打开隧道(在后台运行)
ssh -N -L port:host:5432 user@$ip -i ~/.ssh/key.pub &
Run Code Online (Sandbox Code Playgroud)
命令 2:通过隧道端口连接到数据库:
PGPASSWORD=password psql dbname -U user -h ip_address -p port;
Run Code Online (Sandbox Code Playgroud)
这很棒,但我想将它们放在一个函数中。但没有任何东西对我有用:
尝试 1:在没有背景的情况下运行:
function db()
{
ssh -N -L port:host:5432 user@$ip -i ~/.ssh/key.pub &
PGPASSWORD=password psql dbname -U user -h ip_address -p port;
}
Run Code Online (Sandbox Code Playgroud)
简单地告诉我:
$proddb
[1] 62924
psql: could not connect to server: Connection refused
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port 6666?
Run Code Online (Sandbox Code Playgroud)
尽管初始命令在后台运行:
ps aux | grep host
(standard input):435:abdullah 62924 0.0 0.0 4315660 5828 s006 S 3:06PM 0:00.03 ssh -N -L port:host:5432 user@$ip -i ~/.ssh/key.pub
Run Code Online (Sandbox Code Playgroud)
如果我在它之后立即运行下一个命令..我连接到数据库就好了!
PGPASSWORD=password psql dbname -U user -h ip_address -p port;
user=>
Run Code Online (Sandbox Code Playgroud)
我如何使这项工作?
A.B*_*A.B 17
当第二个命令运行时,第一个命令没有时间建立隧道,因此给出“连接被拒绝”。
只是不要使用&
而是使用选项-f
:
-f
在命令执行之前请求 ssh 进入后台。如果 ssh 将要求输入密码或密码短语,但用户希望在后台使用,这将很有用。这意味着 -n。在远程站点启动 X11 程序的推荐方法是使用类似 ssh -f host xterm 的方法。
如果 ExitOnForwardFailure 配置选项设置为“yes”,则以 -f 启动的客户端将等待所有远程端口转发成功建立,然后再将自己置于后台。
将所有这些放在一起,将函数中的 ssh 行替换为:
ssh -o ExitOnForwardFailure=yes -f -N -L port:host:5432 user@$ip -i ~/.ssh/key.pub
Run Code Online (Sandbox Code Playgroud)
这样多次运行该功能,不会让(multiple-1)无用的ssh运行。
也可以-N
用一个简短的远程睡眠命令代替。这样,如果必须杀死它,就不会存在必须搜索的长期空闲的 ssh 命令。在结束之前,ssh 仍将等待隧道使用结束,因此短暂的延迟不是问题:
ssh -o ExitOnForwardFailure=yes -f -L port:host:5432 user@$ip -i ~/.ssh/key.pub sleep 15
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12999 次 |
最近记录: |