Powershell 命令打开 WSL 会话,连接到远程机器,然后调用该机器上的脚本
Powershell command to open WSL session, connect to a remote machine then invoke a script on that machine
我知道我可以使用 PowerShell 创建到远程机器的连接,但是出于(公司)原因我不能完全解决我需要通过 *nix 机器连接到它。不过没关系,因为就此而言,WSL 系统很好。
我可以弄清楚如何从 PowerShell 脚本通过 WSL 运行 单个命令 -
scp -i ~/.ssh/my_prv_key file.zip ec2-user@2.2.2.2:/home/ec2-user/
例如工作正常。
但是我想做的是连接到远程机器,导航到不同的文件夹,以 root 身份登录,运行 一个脚本...但是我不知道如何从 PowerShell 脚本驱动它。
在 *nix 会话中,我 运行:
ssh -i ~/.ssh/my_prv_key ec2-user@2.2.2.2
然后在远程连接上(例如):
cd /root/scripts
./do_something_with_uploaded_file.sh /home/ec2-user/file.zip
etc...
我假设我会做类似 WSL ssh -i ~/.ssh/my_prv_key ec2-user@2.2.2.2
的事情,但这似乎不起作用 - 它正在连接,因为它显示了上次登录时间,但是然后呢? PowerShell 会话似乎只是等待和等待。
您可以在任何 Unix/Linux 系统上安装 PowerShell
在这台机器上,您可以在使用 powershell 进行远程访问时照常进行。有关教程,请观看此视频:https://www.youtube.com/watch?v=qvJRaYlxI1w - PowerShell Remoting
另见 https://www.thomasmaurer.ch/2019/04/setup-powershell-ssh-remoting-in-powershell-6/
首先,如果您遇到 wsl ssh
似乎挂起但似乎正在连接的问题,则可能是伪终端分配问题。尝试 wsl ssh -t ...
或 wsl ssh -tt ...
看看是否能解决特定问题。
对于你剩下的问题,虽然...
虽然您 可以 在远程 Linux 主机上安装 PowerShell 并使用 PowerShell 远程处理,正如 @ralf-htp 所建议的,我认为这有点矫枉过正运行 EC2 实例上的命令,就像您正在做的那样。它甚至可能是不可能的,因为这些 EC2 实例似乎是公司所有的,您可能无法灵活地为每个实例添加 PowerShell。但如果可行,那就值得考虑了。
for (company) reasons that I can't quite work out I need to connect to it via a *nix machine.
这有点奇怪。您确定不能在 PowerShell 上使用 OpenSSH 吗?这是一项内置功能,只需 turned on。然后,您可以直接从 PowerShell 使用 ssh
命令,而无需通过 WSL。在我看来,遥控器不太可能知道其中的区别。
I can't work out how to drive that from the PowerShell script. From a *nix session I'd run: ssh -i ~/.ssh/my_prv_key ec2-user@2.2.2.2 Then on the remote connection (for example)
这似乎有点像苹果和橘子的比较。您在“from *nix”上给出的示例是 interactive,而不是脚本。但是在 PowerShell 上,你说你想从 PS 脚本中驱动它。
通过 ssh
访问远程主机时,“脚本”答案实际上是相同的。您通常会将 所有 您想要 运行 的命令直接放在 ssh
命令行上。类似于:
ssh -i ~/.ssh/my_prv_key ec2-user@2.2.2.2 "cd /root/scripts `; ./do_something_with_uploaded_file.sh /home/ec2-user/file.zip `; etc"
您在远程主机上引用您想要 运行 的命令,以分号分隔,用反引号 (`
) 引用以允许 PowerShell 将分号传递给远程主机.
第二个选项是 scp
一个脚本文件到远程系统,然后使用类似的 ssh "command"
语法执行它。如果 script/command 列表又长又复杂,这可能会缓解一些引用问题。
我建议 Ansible 可能更适合这里,但出于某种原因,您似乎需要 PowerShell。在 WSL 实例中 运行ning 时,仍然可以从 Ansible 访问 PowerShell 命令,我已经做到了。主要问题是您又开始陷入嵌套 quoting/escaping 问题。
我知道我可以使用 PowerShell 创建到远程机器的连接,但是出于(公司)原因我不能完全解决我需要通过 *nix 机器连接到它。不过没关系,因为就此而言,WSL 系统很好。
我可以弄清楚如何从 PowerShell 脚本通过 WSL 运行 单个命令 -
scp -i ~/.ssh/my_prv_key file.zip ec2-user@2.2.2.2:/home/ec2-user/
例如工作正常。
但是我想做的是连接到远程机器,导航到不同的文件夹,以 root 身份登录,运行 一个脚本...但是我不知道如何从 PowerShell 脚本驱动它。
在 *nix 会话中,我 运行:
ssh -i ~/.ssh/my_prv_key ec2-user@2.2.2.2
然后在远程连接上(例如):
cd /root/scripts
./do_something_with_uploaded_file.sh /home/ec2-user/file.zip
etc...
我假设我会做类似 WSL ssh -i ~/.ssh/my_prv_key ec2-user@2.2.2.2
的事情,但这似乎不起作用 - 它正在连接,因为它显示了上次登录时间,但是然后呢? PowerShell 会话似乎只是等待和等待。
您可以在任何 Unix/Linux 系统上安装 PowerShell
在这台机器上,您可以在使用 powershell 进行远程访问时照常进行。有关教程,请观看此视频:https://www.youtube.com/watch?v=qvJRaYlxI1w - PowerShell Remoting
另见 https://www.thomasmaurer.ch/2019/04/setup-powershell-ssh-remoting-in-powershell-6/
首先,如果您遇到 wsl ssh
似乎挂起但似乎正在连接的问题,则可能是伪终端分配问题。尝试 wsl ssh -t ...
或 wsl ssh -tt ...
看看是否能解决特定问题。
对于你剩下的问题,虽然...
虽然您 可以 在远程 Linux 主机上安装 PowerShell 并使用 PowerShell 远程处理,正如 @ralf-htp 所建议的,我认为这有点矫枉过正运行 EC2 实例上的命令,就像您正在做的那样。它甚至可能是不可能的,因为这些 EC2 实例似乎是公司所有的,您可能无法灵活地为每个实例添加 PowerShell。但如果可行,那就值得考虑了。
for (company) reasons that I can't quite work out I need to connect to it via a *nix machine.
这有点奇怪。您确定不能在 PowerShell 上使用 OpenSSH 吗?这是一项内置功能,只需 turned on。然后,您可以直接从 PowerShell 使用 ssh
命令,而无需通过 WSL。在我看来,遥控器不太可能知道其中的区别。
I can't work out how to drive that from the PowerShell script. From a *nix session I'd run: ssh -i ~/.ssh/my_prv_key ec2-user@2.2.2.2 Then on the remote connection (for example)
这似乎有点像苹果和橘子的比较。您在“from *nix”上给出的示例是 interactive,而不是脚本。但是在 PowerShell 上,你说你想从 PS 脚本中驱动它。
通过 ssh
访问远程主机时,“脚本”答案实际上是相同的。您通常会将 所有 您想要 运行 的命令直接放在 ssh
命令行上。类似于:
ssh -i ~/.ssh/my_prv_key ec2-user@2.2.2.2 "cd /root/scripts `; ./do_something_with_uploaded_file.sh /home/ec2-user/file.zip `; etc"
您在远程主机上引用您想要 运行 的命令,以分号分隔,用反引号 (`
) 引用以允许 PowerShell 将分号传递给远程主机.
第二个选项是 scp
一个脚本文件到远程系统,然后使用类似的 ssh "command"
语法执行它。如果 script/command 列表又长又复杂,这可能会缓解一些引用问题。
我建议 Ansible 可能更适合这里,但出于某种原因,您似乎需要 PowerShell。在 WSL 实例中 运行ning 时,仍然可以从 Ansible 访问 PowerShell 命令,我已经做到了。主要问题是您又开始陷入嵌套 quoting/escaping 问题。