以下是使用Heredoc的ssh脚本的示例(实际脚本更为复杂)。是否可以在SSH heredoc或命令中同时使用本地和远程变量?
FILE_NAME
在本地服务器上设置为在远程服务器上使用。REMOTE_PID
在远程服务器上运行时设置为在本地服务器上使用。FILE_NAME
在脚本中被识别。REMOTE_PID
未设置。
如果EOF
更改为'EOF'
,则REMOTE_PID
设置为,而`FILE_NAME则未设置。我不明白为什么会这样?
有没有一种可以同时识别REMOTE_PID
和FILE_NAME
识别的方式?
正在使用bash的版本2。默认的远程登录名是cshell,本地脚本是bash。
FILE_NAME=/example/pdi.dat
ssh user@host bash << EOF
# run script with output...
REMOTE_PID=$(cat $FILE_NAME)
echo $REMOTE_PID
EOF
echo $REMOTE_PID
$
如果您不想扩展变量,则需要转义符号:
$ x=abc
$ bash <<EOF
> x=def
> echo $x # This expands x before sending it to bash. Bash will see only "echo abc"
> echo \$x # This lets bash perform the expansion. Bash will see "echo $x"
> EOF
abc
def
因此,在您的情况下:
ssh user@host bash << EOF
# run script with output...
REMOTE_PID=$(cat $FILE_NAME)
echo \$REMOTE_PID
EOF
或者,您也可以使用带单引号的herestring:
$ x=abc
$ bash <<< '
> x=def
> echo $x # This will not expand, because we are inside single quotes
> '
def
问题内容: 如何在ssh命令中同时包含本地和远程变量?例如下面的示例代码: 我可以访问A,但无法访问B。 但是在以下示例中: 我没有A,只能访问B。 是否可以同时访问A和B? 问题答案: 我认为这是您想要的: 使用双引号时 : 您的shell会对前缀为的变量进行自动扩展,因此在您的第一个示例中,当看到 bash将其扩展为: 并 然后 传递作为参数。这是因为您是使用定义的,但从未定义过,因此会在本地
问题内容: 我希望能够使用ssh从我的机器上运行命令并传递环境变量 这是我正在尝试的: 是在进行ssh调用的计算机上设置的,并且由于该变量在远程主机上不存在,因此不会被提取。 如何传递的值? 问题答案: 如果您使用 代替 您的外壳程序会在将命令字符串发送到远程主机之前进行插值。
问题内容: 我试图通过这样的本地服务器上的ssh命令在远程linux服务器上执行命令: ssh myremoteserver’类型ttisql’ 其中ttisql是我的远程计算机路径上的可执行文件。 运行此命令的结果是: bash:第0行:类型:ttisql:未找到 当我只是先连接并执行以下操作: ssh myremoteserver 然后输入命令: [myuser @ myremoteserve
我正在尝试设置一个类,以便我可以通过ssh连接到远程服务器(我有IP、用户名和密码),然后发送类似“echo”test“”的命令,然后接收回输出(例如,“test”)。我用JSch来做这个,但我不知道怎么做。 我不知道该怎么办,连接后我卡住了。 非常感谢您的建议。
远程Linux计算机位于内部网络中,没有公共IP地址。所以我安装了ngrok。 ngrok by@不可恢复(Ctrl C退出)在线隧道状态2.0.19/2.0.17版Web界面http://127.0.0.1:4040 转发tcp://0.tcp.ngrok.io:36428 - 我检查了sshd是否正在运行。 在当地的电脑上,我试着 这引起了 SSH:连接到主机ngrok.com端口36428:
问题内容: 在我的我确定,我可以在命令行后使用的功能: 使用此命令时,仅在远程主机上执行该命令。该命令在本地主机上执行。这是因为分号将两个不同的命令分开:命令和命令。 我尝试如下定义函数(注意单引号): 我试图将命令和命令放在一起,但是参数解析不取决于我给函数的内容。总是试图执行命令 在远程主机上。 如何正确定义,所以剧本正在改变进入目录后,在远程主机上执行,具有传递给参数的能力来? 问题答案: