【问题标题】:Fish shell new function : "ssh: command not found "鱼壳新功能:“ssh:找不到命令”
【发布时间】:2018-12-07 22:33:50
【问题描述】:

我正在尝试创建一个函数,将我连接到 ssh 服务器,然后变成 su,然后 ssh 到另一台服务器,所以我做了以下操作:

function test 
     ssh -t testuser@server1 'sudo ssh -t testuser@server2' 
end

当我执行它时,我收到以下错误ssh: command not found

但是当我直接在终端执行它时,它没有问题。

【问题讨论】:

  • 不要调用函数test。这是一个相当重要的内置鱼的名称。在即将到来的 3.0 中,该名称被保留。
  • @faho 我在这种情况下使用了函数测试,但我的函数被称为别的东西。
  • 可能错误来自 server1?

标签: ssh fish


【解决方案1】:

这听起来像是 server1 上的路径问题。

在命令行中,如果您键入以下内容,您会看到什么?

ssh -t testuser@server1 sudo which ssh 

如果 SSH 不在 root 路径中,您可能需要指定完整路径,例如:

ssh -t testuser@server1 sudo /usr/bin/ssh testuser@server2

当然,您可能需要调整路径以匹配您的环境。

另外,如果你试图从 server1 的 root 连接到 server2,你可以直接 ssh 到 root@server1 吗?如果是这样,您或许可以使用随 OpenSSH 7.3 添加的“ProxyJump”功能。这取决于以 root 身份远程登录的能力,这可能不是一个选项,具体取决于您的环境。

ssh -J root@server1 testuser@server2

【讨论】:

  • 感谢您的回答,但它在 bash 上效果很好,所以路径是正确的,只是由于某种原因鱼不喜欢它。
  • 但是 fish 的路径是否与 bash 相同?当你说它“在 bash 上运行良好”时,你是在任何远程服务器上运行 fish 吗?
  • 我没有在远程服务器上运行它们。我的客户端上只安装了鱼。
【解决方案2】:

当我将它们中的每一个添加到鱼函数文件夹时,我的问题就解决了:

~/.config/fish/functions

我刚刚创建了一个名为 myfunction.fish 的文件,并在该文件中粘贴了函数定义:

function myfunction 
     ssh -t testuser@server1 'sudo ssh -t testuser@server2' 
end

保存它,退出鱼,现在该功能是永久性的。

【讨论】:

    猜你喜欢
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    相关资源
    最近更新 更多