BASH-登录到一个服务器,然后再登录到另一个服务器
我正在编写一个脚本,以登录到网关服务器,并从网关服务器登录到只能通过网关访问的节点 我的脚本看起来像:BASH-登录到一个服务器,然后再登录到另一个服务器,bash,ssh,eof,Bash,Ssh,Eof,我正在编写一个脚本,以登录到网关服务器,并从网关服务器登录到只能通过网关访问的节点 我的脚本看起来像: #!/bin/bash cool () { ssh -A SERVER << EOF ls -l EOF } fool () { ssh -A GATEWAY << EOF touch foobar $(cool) EOF } export -f cool export -f fool fool #/b
#!/bin/bash
cool () {
ssh -A SERVER << EOF
ls -l
EOF
}
fool () {
ssh -A GATEWAY << EOF
touch foobar
$(cool)
EOF
}
export -f cool
export -f fool
fool
#/bin/bash
酷(){
ssh-如何在ssh中执行代理的服务器
我假设您设置了pubkey身份验证,因此不需要编写密码。SSH具有非常好的代理功能,如果您在~/.SSH/config
中创建配置文件,它的工作原理非常好:
Host SERVER
ProxyCommand ssh -W %h:%p GATEWAY
然后可以使用单个命令ssh-server
连接到服务器。如果需要执行某些命令,请在ssh-server“ls-l”之后添加它
如何修复你的bug
函数的作用域cool
仅限于脚本,因此在第二个ssh
管道中的herdoc
中无法识别。如果要在第二个shell中使用函数,需要在其作用域中定义它
同时调用函数作为$(酷)
在子流程中运行函数,这是您不想要的。您想要直接调用函数
#!/bin/bash
fool () {
ssh -A GATEWAY << EOF
cool () {
ssh -A SERVER << EOF2
ls -l
EOF2
}
touch foobar
cool
EOF
}
export -f fool
fool
!/bin/bash
傻瓜(){
ssh-网关问题是您通常无法通过ssh
连接导出函数(或任何内容)。如果您希望在远程主机上运行函数,则需要在那里定义它
#!/bin/bash
fool () {
ssh -A GATEWAY << EOF
touch foobar
cool () {
ssh -A SERVER <<EOF2
ls -l
EOF2
}
cool
EOF
}
fool
!/bin/bash
傻瓜(){
ssh-网关“然后开始从启动屏幕读取消息并执行不正确的命令”-什么?什么是“启动屏幕”以及您指的是什么“命令”?当我登录到服务器时,会出现一个spalsh屏幕,告诉我上次登录该服务器的时间;我希望它运行的命令是“ls-l”,但它开始执行“您的上次登录…”如果您更改$,会发生什么(酷)
tocool
?-bash:line 5:cool:command not found这是您在GATEWAY上唯一想要的解决方案,所以登录到服务器,但这里不是这样。@chepner是的,这是解决方案,如何正确执行,而不是如何解决bash
OPs代码中的基本问题。但是,是的,最好尝试将其修复到o。