【问题标题】:SSH : connect .. execute .. printenv SSH_CONNECTION .. show only IPSSH:连接 .. 执行 .. printenv SSH_CONNECTION .. 仅显示 IP
【发布时间】:2017-01-25 20:30:23
【问题描述】:

代码如下:

command="ssh -p 2222 -t root@$ip";
command2='"printenv SSH_CONNECTION;bash"'
xfce4-terminal -x sh -c "$command $command2; bash"

输出是:

 00.00.00.00 53011 10.245.0.225 2222

第一项是我的 ip。我用 0 替换了所有数字。
第二项.. 可能是 PID 什么的。
第三项.. 可能是云主机所说的“私有 ip”的东西。
第四项.. ssh 端口。

我想要的只是打印出我的 ip。
而不是所有其他的东西。

换句话说就是

  00.00.00.00 

最干净的..最轻的..资源消耗最少的方法..

【问题讨论】:

  • 只是为了验证bash 的所有额外调用是必要的:您想打开一个连接到远程主机的新终端,在那里显示IP 地址,然后将您留在远程shell ,当你退出 that shell 时,终端在本地 shell 中保持打开状态?
  • 您在SSH_CONNECTION 中看到的值的格式为sourceIP sourcePort destinationIP destinationPort。您需要做的就是将printenv SSH_CONNECTION 替换为echo \${SSH_CONNECTION%% *}。

标签: bash shell awk grep tr


【解决方案1】:

参数替换可用于限制SSH_CONNECTION 扩展的内容。 (不需要printenv,因为SSH_CONNECTION 是一个有效的shell 标识符。)

command="ssh -p 2222 -t root@$ip";
command2='"echo \${SSH_CONNECTION%% *};bash"'
xfce4-terminal -x sh -c "$command $command2; bash"

【讨论】:

  • 你必须逃跑:\${SSH_CONNECTION%% *}.
  • 我不这么认为。它不会被扩展,因为分配给command2 的值是单引号。当$command2 展开时它也不会展开,所以远程shell 应该看到echo ${SSH_CONNECTION%% *}; bash 作为命令。 (但这就是为什么我不尝试将临时脚本作为参数传递给 ssh,更不用说当对 ssh 的调用本身是参数的一部分时。)
  • 哦,等等,你是对的,因为它在运行 ssh 之前将扩展为 sh。
【解决方案2】:

例如尝试使用 awk:

回显“00.00.00.00 53011 10.245.0.225 2222”| awk '{print $1}'

【讨论】:

  • awk 在command2='"printenv SSH_CONNECTION;bash"' 中存在转义问题,我相信需要大量引用。
猜你喜欢
  • 2017-06-11
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 2012-07-29
  • 2014-09-02
  • 2023-03-27
  • 1970-01-01
  • 2019-10-12
相关资源
最近更新 更多