Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BASH-登录到一个服务器,然后再登录到另一个服务器_Bash_Ssh_Eof - Fatal编程技术网

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”,但它开始执行“您的上次登录…”如果您更改
$,会发生什么(酷)
to
cool
?-bash:line 5:cool:command not found这是您在GATEWAY上唯一想要的解决方案,所以登录到服务器,但这里不是这样。@chepner是的,这是解决方案,如何正确执行,而不是如何解决
bash
OPs代码中的基本问题。但是,是的,最好尝试将其修复到o。