我需要编写一个脚本,通过ssh从家里远程连接到我的大学服务器,然后从服务器终端ssh远程连接到虚拟机来处理一些数据。这个是可能的吗?
这就是我迄今尝试过的:
#!/usr/bin/expect
set login "myuser"
set addr "test.ac.uk"
set addr2 "t002"
set pw "mypassword"
spawn ssh -o StrictHostKeyChecking=no $login@$addr
expect "$login@$addr\'s password:"
send "$pw\r"
expect "#"
spawn ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22
expect "$login@$addr2\'s password:"
send "$pw\r"
expect "#"
send "cd /developer\r"
interact错误:ssh:连接到主机t002端口22:连接被拒绝
这就是我目前在家中成功手动登录的方式:
~/Desktop # ssh host提示输入密码。
一旦成功登录。
-bash-4.2$ ssh user@t002提示再次输入密码。
编辑:我按照Mike的建议更新了第二行ssh。
发自:
spawn ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22至:
send "ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22\r"
现在,脚本返回拒绝访问,但同时它确实将我登录到服务器,而不是虚拟机。
发布于 2018-11-22 22:15:48
这是一个常见的问题,您希望访问的服务器不能直接从外部internet访问,但它可以从公开公开的中间主机访问。(中间主机称为jumpbox。)
由于这个问题非常常见,所以OpenSSH很自然地会提供方便的方法来简化对jumpboxes (或jumpboxen?)的操作。有两种方式,一种旧的方式和一种新的方式。旧的方法仍然有效,但是新的方法更直观,并且对在jumpbox上可用的应用程序做了更少的假设。
使用问题中提到的示例机器,可以这样做:
ssh -o StrictHostKeyChecking=no -o ProxyJump=myuser@test.ac.uk myuser@t002或者,与-o ProxyJump=myuser@test.ac.uk不同,我认为-W myuser@test.ac.uk是等价的。
无论哪种方法,该方法都需要一个足够新的OpenSSH版本。如果你被旧版本困住了,你需要做这样的事情:
ssh -o StrictHostKeyChecking=no -o ProxyCommand='ssh myuser@test.ac.uk "nc %h %p"' myuser@t002旧的方法假设你在跳投箱上安装了netcat。
新方法的另一个好处是您不需要在jumpbox上保留私钥。ProxyJump非常聪明,可以尝试使用本地拥有的私钥。因此,如果跳投箱被破坏,它就不需要破坏跳投箱后面的任何东西。
现在,你可能会厌倦每次写那么长的命令。使用ssh越多,就越需要设置$HOME/.ssh/config。这是一个文件,您可以为远程主机提供别名,并将特定配置与这些主机相关联。
对于您的示例,ssh_config的设置如下所示:
Host jumpbox
User myuser
Hostname test.ac.uk
StrictHostKeyChecking=no
Host t002
User myuser
StrictHostKeyChecking=no
ProxyJump jumpbox在配置就绪之后,您现在应该能够使用一个简单得多的命令登录到t002:
ssh t002还有很多其他很酷的东西可以用ssh_config来做。通过man ssh_config查看一下,并在您了解有关ssh的更多信息时,不时地重新访问它。你会不断发现更多你能做的很酷的事情:)
设置ssh配置的示例介绍演练是https://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/。
发布于 2018-11-22 18:20:01
我只需要在脚本中使用一个命令来减少输入,然后输入用户cred!
#!/bin/bash
ssh -o StrictHostKeyChecking=no myuser@test.ac.uk 'ssh -o StrictHostKeyChecking=no myuser@t002'根据你的需要量身定做。
ssh -o StrictHostKeyChecking=no myuser@test.ac.uk 'ssh -tt -o StrictHostKeyChecking=no myuser@t002'将密钥从第一台服务器复制到您的pc并引用如下所示:
ssh -o StrictHostKeyChecking=no myuser@test.ac.uk 'ssh -tt -o StrictHostKeyChecking=no -i /ssh/1stserverkey myuser@t002'发布于 2018-11-22 19:43:38
你生了一个新的ssh。尝试:
send "ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22\r"https://unix.stackexchange.com/questions/483504
复制相似问题