我想要一个 bash 脚本在多个新的 bash 窗口中启动多个 SSH 连接到多个 linux 服务器,而不是为了进一步处理,只是用一个简单的命令进行连接,而不是每次我重新启动 bash 时都必须输入完整的 ssh 行(使用WSL2/WSLg)。
打开新终端并在其中执行命令完全没有问题。仅运行 ssh (openSSH) 在所有三种情况下都是一个问题,因为它们都会抛出相同的错误:'ad port ' 12345
在 bash 中手动执行它我确实像这样调用 ssh:ssh [email protected] -p 12345
所以我假设,就像每个命令一样,我可以按以下方式编写脚本:
#!/bin/bash
ssh [email protected] -p 12345
ssh [email protected] -p 67890
ssh [email protected] -p 54321
这是与脚本相关的问题,还是可能是 WSL 问题?
编辑:我想指出我现在的重点主要是我得到的“广告端口”错误。我不知道这是什么,我在 Inet 上找不到任何有用的信息。
EDIT2:这只是对代码的过度简化,因为我不允许分享整个脚本的任何细节。我知道,这段代码只会按顺序执行 ssh,但这只是为了测试。我只想查看按顺序建立的三个连接(登录由 RSA 密钥对处理)。
整个脚本是在 Proxmox->Debian 服务器(在 Proxmox 上运行的虚拟 Debian)上使用 NANO 或 VIM 编写的。因此,遗憾的是 CRLF 行尾不是问题。感谢您指出这一点!
这个问题没有直接解决,但可以通过@NotTheDr01ds 建议的另一种方法 - 使用 tmux 来解决!
这很可能是由于在使用 DOS/Windows CRLF 行结尾保存文件的Windows编辑器中创建或编辑文件造成的。如果我使用
notepad.exe
. 记事本现在可以以 Unix/Linux 格式保存,但默认情况下它不会保存新文件,除非您手动更改该选项。通常,始终使用 Linux 工具在 WSL 中编辑文件。
您的脚本尚未尝试解决此问题。如评论中所述,当前脚本将在单个
bash
实例中按顺序运行这些脚本(脚本的 shebang 行本身的子shell)。如果您想将每个启动到一个单独的“窗口”中,您将需要一些提供该功能的工具。该
wsl.exe
命令本身并不是一个很好的选择,因为默认情况下,它将在当前终端内执行一个新实例。可以将 PowerShell(甚至在 WSL 中)与cmdlet 一起使用Start-Process
来启动新的 WSL 窗口/终端:来自 WSL:
这可以结合
wsl.exe
'-e/--execute
参数来启动ssh
命令:但我建议为此使用 Tmux。它默认安装在 WSL Ubuntu 发行版中:
这将
ssh
在 3 个不同的 Tmux 窗口中运行您的命令,然后在每个窗口中启动一个 bash shell,以便您可以查看结果。如果您还不了解 Tmux,则需要学习一些热键才能切换窗口等。当然,还有其他方法可以做到这一点。