跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请大家帮忙看看 ssh 远程命令如何避免被本地解析?
未分類
29 10 月 2020

请大家帮忙看看 ssh 远程命令如何避免被本地解析?

请大家帮忙看看 ssh 远程命令如何避免被本地解析?

資深大佬 : bluehtt 4

大概意思是本地服务器 A 发送命令到指定服务器 B,使服务器 B 启动 nginx 容器,并且将服务器 B 的 /etc/hosts 记录添加到 nginx 容器中。远程执行命令如下:

$ ssh [email protected] "docker run -d --name nginx-test $(cat /etc/hosts | grep '^192'| awk '{print "--add-host " $2":"$1}' | awk '{if(NR%900==0){printf $0 "n"}else{printf "%s ",$0}}')  -p 80:80 nginx" 

执行命令后没有按照预想的将服务器 B 的 hosts 记录添加到 nginx 容器中,而是把服务器 A 的 hosts 记录添加了进去。这种情况有无办法处理?谢谢。

大佬有話說 (17)

  • 資深大佬 : wlsnx

    最外面的双引号换成单引号试试,如果不行就把命令写到脚本里上传到目标机器再执行

  • 資深大佬 : rizon

    双引号的 $()会被执行的的。你换单引号 或者转义一下试试 “$()”

  • 資深大佬 : Jirajine

    把 $ 转义

  • 主 資深大佬 : bluehtt

    @wlsnx #1 两个方案我都试过了,解决不了

  • 資深大佬 : codehz

    (对面开一个 bash -然后本地用文件 pipe 过去

  • 主 資深大佬 : bluehtt

    @rizon @Jirajine #2 #3 嗯,是会想到转义 $。你们可能没有看到 $ 里面的命令,转义更复杂,我试了很多都失败了。

  • 主 資深大佬 : bluehtt

    @codehz #5 具体如何操作呢?我觉得里面的命令没想的这么简答

  • 資深大佬 : nuk

    老哥先 echo 一下呀,echo 的结果就是远程执行的命令,当然这个双引号显然也是有问题的。

  • 資深大佬 : codehz

    @bluehtt 这个就是非常通用的解决方法,适用于任何场景。。。唯一的问题就是多一个文件,但是总比思考转义方便
    把命令按文本写在一个文件里(这里假设名字是 command ),不需要额外的转义,可以有换行。
    然后再执行
    <command ssh [email protected] “bash -s”
    (<pipe 放哪里都一样,只要和命令本体隔开至少一个空格

  • 資深大佬 : pagxir

    CMD=$( cat << ‘EOF’ docker run -d –name nginx-test $(cat /etc/hosts | grep ‘^192’| awk ‘{print “–add-host ” $2″:”$1}’ | awk ‘{if(NR%900==0){printf $0 “n”}else{printf “%s “,$0}}’) -p 80:80 nginx EOF ) ssh [email protected] $CMD

  • 資深大佬 : pagxir

    CMD=$(
    cat << ‘EOF’
    docker run -d –name nginx-test $(cat /etc/hosts | grep ‘^192’| awk ‘{print “–add-host ” $2″:”$1}’ | awk ‘{if(NR%900==0){printf $0 “n”}else{printf “%s “,$0}}’) -p 80:80 nginx
    EOF
    )
    ssh [email protected] $CMD

  • 資深大佬 : lc1450

    /etc/hosts 这种一般硬射进去好一点吧,方便修改

  • 主 資深大佬 : bluehtt

    @lc1450 #12 嗯,文件映射是可以的,但是感觉怪怪的。

  • 主 資深大佬 : bluehtt

    @pagxir #11 可以了,多谢。这里的 CMD 是一个临时文件是吗?

  • 主 資深大佬 : bluehtt

    @codehz 好的,多谢了。

  • 資深大佬 : codehz

    @bluehtt 是一个变量,这是利用 heredoc 特性做的,这么说也不用变量了,结合一下直接

    ssh [email protected] ‘bash -s’ <<‘这段文字表示分割线,只要不和内容冲突就好’
    任何命令
    这段文字表示分割线,只要不和内容冲突就好

    之前没提这个主要是没想起来 heredoc 也可以禁用内部转义的

  • 主 資深大佬 : bluehtt

    @codehz #16 受益匪浅,

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具