Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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
sshing时传递bash变量_Bash_Ssh_Parameter Passing - Fatal编程技术网

sshing时传递bash变量

sshing时传递bash变量,bash,ssh,parameter-passing,Bash,Ssh,Parameter Passing,我在多人运行需要端口转发的应用程序时遇到一些问题。我想生成一个随机端口号,在传递该随机号的同时ssh到应用程序服务器,并在几个不同的脚本中用这个替换默认端口 那么,我有没有办法通过ssh传递bash变量,或者有没有更好的方法来实现这一点?如果您知道如何处理变量,可以将其传递到远程主机,并在同一行上运行命令: ssh name@host "sed -i -e \"s/$myrandnumber/22/g\" file1 file2 file3" $myvar将在sshing发生之前展开,这意味着

我在多人运行需要端口转发的应用程序时遇到一些问题。我想生成一个随机端口号,在传递该随机号的同时ssh到应用程序服务器,并在几个不同的脚本中用这个替换默认端口


那么,我有没有办法通过ssh传递bash变量,或者有没有更好的方法来实现这一点?

如果您知道如何处理变量,可以将其传递到远程主机,并在同一行上运行命令:

ssh name@host "sed -i -e \"s/$myrandnumber/22/g\" file1 file2 file3"
$myvar
将在
ssh
ing发生之前展开,这意味着它将是您在原始计算机上设置的值,而不是远程计算机上设置的值。您可以在远程计算机上将其设置为变量:

ssh name@host "export remotevar=$myrandnumber; bash -i" 
但它将仅在当前会话中可用。如果您只是希望为将来的某个日期存储变量,那么您最好将其写入一个稍后将获得源代码的文件,即

ssh name@host "echo \"myvar=$myrandnumber\" >> /etc/environment"

如果您只是生成一个随机数,那么在本地生成它与在您
ssh
d的机器上生成它有什么区别?因为它是一个随机数,在建立ssh连接时用作转发端口,也是一个从docker容器转发到此远程服务器的端口(两跳连接)
sshname@host“sed-i-e \”s/$myrandname/22/g \“file1 file2 file3”
起作用了?文件可能位于不同的位置,因此我打算在服务器上使用一些python代码(无论它位于何处),当运行时,会提取希望传递的shell变量的值,然后稍后使用它重写具有已知相对路径(但不知道绝对路径)的文件中的值。我知道这有点让人困惑,也许另一种方法会更干净。
sshname@host“python myscript.py$myrandnumber”
?应该更清楚。第一行无法执行任何操作(已编辑)。如果不在某个位置写入文件,则无法跨多个会话生成全局变量。您所能做的最接近的事情就是附加到
/etc/environment
,这样该机器上的所有用户都将拥有该变量。这是预期的行为。它确实连接了。连接仅在命令执行期间打开。一旦
中的命令用完,它将结束连接并将您返回到本地计算机。这就是为什么你不能发送一个变量;您必须立即知道如何处理它,或者通过将其写入文件的某个位置使其保持不变。不,但您可以写入文件,然后重新连接。如果您在登录时向某个来源地(如
.bashrc
/etc/environment
)进行了写操作,您将获得不同的结果。实际上,您可以通过调用shell作为传递给SSH的命令的一部分来维护连接,类似于上一个示例:
SSHname@host“export remotevar=$myvar;bash-i”
@Austin嘿,我错了,见上面的评论。