V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fasling
V2EX  ›  macOS

iterm2 能在远程机器上执行一个本机的 shell 脚本吗?

  •  
  •   fasling · 2015-12-03 10:51:47 +08:00 · 3929 次点击
    这是一个创建于 3079 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前用 xshell 的时候,可以在远程机器执行本机的一个命令或者一段脚本.
    iterm2 能实现类似的功能吗?

    第 1 条附言  ·  2015-12-03 14:24:25 +08:00
    貌似 iterm2 的 trigger 可以正则匹配一些字符串然后触发一些动作,输入文本或者执行命令.刚刚捣鼓了一会儿没有搞定.
    第 2 条附言  ·  2015-12-03 19:54:48 +08:00
    感谢各位的回复.我目前已经搞定.
    使用 iterm2 自带的 triggers 功能实现.匹配特定的文本,然后 send text, 需要注意的是 send text 里会默认是 icu regex ,如果要输入反斜杠之类的东西,需要注意.
    35 条回复    2015-12-05 14:40:26 +08:00
    Chingim
        1
    Chingim  
       2015-12-03 11:09:57 +08:00
    ssh [email protected] "touch /root/test"
    Chingim
        2
    Chingim  
       2015-12-03 11:11:15 +08:00
    貌似我理解错了,不符合“本地脚本”的要求
    fasling
        3
    fasling  
    OP
       2015-12-03 13:04:56 +08:00
    @Chingim 嗯,不是这样的.我已经登录到远程机器上了,然后本机有一些写好的脚本.想在远程机器执行.
    think2011
        4
    think2011  
       2015-12-03 13:06:28 +08:00
    每次传送过去,然后执行?
    fasling
        5
    fasling  
    OP
       2015-12-03 13:25:18 +08:00
    @think2011 xshell 的方式好像是直接发送字符串过去的
    skydiver
        6
    skydiver  
       2015-12-03 13:35:20 +08:00
    cat script.sh | ssh xxx@yyy bash -s
    fasling
        7
    fasling  
    OP
       2015-12-03 13:55:37 +08:00
    @skydiver 这样不行,我已经在远程机器上了.而且远程机器是在跳板机后面的.
    skydiver
        8
    skydiver  
       2015-12-03 14:06:46 +08:00
    @fasling
    cat script.sh | ssh relay -tt ssh xxx@yyy bash -s
    skydiver
        9
    skydiver  
       2015-12-03 14:07:32 +08:00
    另外这个问题和 iterm2 无关, mac 里就是用的命令行的 ssh
    yyy
        10
    yyy  
       2015-12-03 14:11:51 +08:00   ❤️ 1
    @skydiver
    我被你艾特了
    fasling
        11
    fasling  
    OP
       2015-12-03 14:23:38 +08:00
    @skydiver 我不是想这样执行,而是已经登录到某台远程机器了,然后执行一些写在我本地的脚本.
    adrianzhang
        12
    adrianzhang  
       2015-12-03 14:31:46 +08:00
    @yyy 这是我今天看到最好笑的笑话。
    crisrock
        13
    crisrock  
       2015-12-03 14:37:18 +08:00
    @yyy O(∩_∩)O 哈哈~
    skydiver
        14
    skydiver  
       2015-12-03 14:54:14 +08:00
    @yyy 抱歉 23333
    skydiver
        15
    skydiver  
       2015-12-03 14:55:34 +08:00
    @fasling 你就不能变通一下么……再开个标签不就得了……为啥非要纠结已经登录的问题呢
    rphoho
        16
    rphoho  
       2015-12-03 14:57:45 +08:00
    nc 反弹一下?
    skydiver
        17
    skydiver  
       2015-12-03 15:06:10 +08:00
    @fasling
    xshell 之类比较适合 windows 这种本地没有 bash 的环境的操作系统,所以是直接把文件内容传上去执行。
    而*nix 上的思路是利用各种工具、管道来达到同样的目的,通过管道来传递内容。
    本身思路就不一样,所以没法照搬。

    如果非要用 xshell 那种思路的话,倒也是有办法。要么 cat script.sh|pbcopy 然后贴上去执行,要么把脚本拷到机器上执行。或者可以装一个 mac 版的 securecrt 之类然后继续用 windows 那种思路。

    但是我还是觉得既然用了 mac 就适应一下*nix 的思路吧,熟悉了之后你会发现效率更高。
    fasling
        18
    fasling  
    OP
       2015-12-03 15:11:41 +08:00
    @skydiver 我大概的场景是需要不定期到一些不固定的机器上去做一些工作,想要用这种方式来定制我自己的工作环境.
    feiandxs
        19
    feiandxs  
       2015-12-03 15:46:47 +08:00
    @fasling 把你的工作环境扔 git 里 包括 scripts 和 toos 和 tips

    然后上了什么不固定的机器第一件事是看装了 git 没有 然后拖下来。。
    fasling
        20
    fasling  
    OP
       2015-12-03 15:52:53 +08:00
    @feiandxs 那些机器都不可以访问外网,没有安装工具权限.我的脚本只会做一些很轻量的工作.
    imgalaxy
        21
    imgalaxy  
       2015-12-03 16:56:47 +08:00 via Android
    那么你远端的机器能不能连接到你本机呢?通过 ip
    liuweisj
        22
    liuweisj  
       2015-12-03 16:59:15 +08:00
    cat script.sh | ssh server
    fasling
        23
    fasling  
    OP
       2015-12-03 17:48:36 +08:00
    @imgalaxy 也是不可以的. 我通过一个跳板机连接别的机器,那些机器只能访问若干局域网的服务器.不能连接到公网或者我本机.
    AWSAM
        24
    AWSAM  
       2015-12-03 17:53:09 +08:00
    主要问题是中间加了个跳板机不能直接传文件对吧

    ssh -NT -L port:ip:port -l username host
    开端口转发
    然后就能 scp 把文件传过去执行了
    jimmyye
        25
    jimmyye  
       2015-12-03 18:13:30 +08:00
    试试 ansible ?不过可能太重
    cxbig
        26
    cxbig  
       2015-12-03 18:23:47 +08:00
    cat | ssh 即可
    fasling
        27
    fasling  
    OP
       2015-12-03 19:32:53 +08:00
    @AWSAM 不是不能传文件,我已经配置好了 rz sz, 主要就是想直接执行一些命令,不用我手动敲一遍.
    ooxxcc
        28
    ooxxcc  
       2015-12-03 19:37:28 +08:00
    在跳板机器上装个 ansible 可破, ad-hoc 批量执行几句命令还是很轻松的
    kevin1852
        29
    kevin1852  
       2015-12-03 21:46:39 +08:00 via iPad
    @yyy 这 ID 太 6666
    JerningChan
        30
    JerningChan  
       2015-12-04 17:45:32 +08:00
    你开 2 个 terminal,然后一个是看脚本,一个是 remote host
    改了脚本,然后就 cat script
    然后就在 remote host 用 cat > script
    把内容粘贴过去...然后就执行不是很爽?
    为什么,你要折腾这个东西呢?
    fasling
        31
    fasling  
    OP
       2015-12-04 19:04:01 +08:00
    @JerningChan 也是个办法.你就当我是个 op 吧, 有一堆自己的脚本工具在本机,然后经常要去各种机器上查看问题,维护机器什么的.所以就会这样.
    JerningChan
        32
    JerningChan  
       2015-12-04 19:46:42 +08:00
    @fasling 那樣的話,你應該做一臺測試機出來,然後在測試機上測好了,再把腳本放去服務器上搞呀
    JerningChan
        33
    JerningChan  
       2015-12-04 19:48:28 +08:00
    還有個方法,就是,你自己搞個 svn apache 代理,然後你在那些服務器上用 wget 下載來用嘛
    fasling
        34
    fasling  
    OP
       2015-12-04 20:55:20 +08:00
    @JerningChan 就是给人维护线上机器啊
    JerningChan
        35
    JerningChan  
       2015-12-05 14:40:26 +08:00
    @fasling 那就用 apache 代理 svn 呀,然後你就可以用 wget 在 remote host 來下載腳本了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1107 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:55 · PVG 03:55 · LAX 12:55 · JFK 15:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.