首页 > 其他分享 >ssh 通过跳板机登陆远程服务器

ssh 通过跳板机登陆远程服务器

时间:2023-08-05 13:33:26浏览次数:42  
标签:跳板 22 ProxyCommand 命令 ssh 服务器

开心一刻

       “老师,你认识元芳吗?”
       “不”
       “你认识程祖吗?”
       “不”
       “那你知道他们的姐是谁吗?”
       “不”
       “老师你都不知道,我怎么知道:原方程组的解是______?”
       “……”

写在前面

       公司服务器只能用内网访问,想要登陆内网服务器只能先登陆跳板机,然后在跳板机登陆内网服务器。不过总想能省点事,从本地直接登陆内网服务器,从网上找到通过 ssh 借助跳板机登陆的文章,自己尝试了之后觉得非常香,就在自己的播客中记录一下,其实就是懒,哈哈哈哈哈。

ProxyCommand

       借助 ssh 的 -o 选项指定一条 ProxyCommand 命令,ProxyCommand 内部就是登陆跳板机的ssh命令,

命令格式如下:

ssh username@目标机器IP -p 22 -o ProxyCommand='ssh -p 22 username@跳板机IP -W %h:%p'

或者

ssh username@目标机器IP -p 22 -o ProxyCommand='ssh -p 22 username@跳板机IP nc -q 1 -w 30 %h %p'

说明:

ProxyCommand 后面跟随的命令放在那个位置不重要,和 -o 选项一起出现即可,后面跟的是一个完整的 ssh 命令;
第二种格式使用登陆跳板机后又使用 nc 命令连接,属于 ssh 登陆远程服务器之后执行一条命令的用法,效果与第一种一样

       命令实际使用起来会比较长,因此 ssh 提供了一个配置文件,可以将相关配置内容放到 ~/.ssh/config 中,例如:

Host 目标机器ip
  # 调试容器登录配置
  Port 22
  ProxyCommand ssh -o "ControlMaster=no" 跳板机IP nc -q 1 -w 30 %h %p

       配置好后,就可以使用 ssh username@目标机器IP 进行登陆。

       上述配置便能登陆目标服务器,并处于目标用户的家目录下,而我在使用时需要进行特定的项目目录并且要导入一些环境变量,因此对于配置文件做了一些修改,以便我登陆服务器后就不必再导入相关的环境变量了,当然进入服务器之后手动导入环境变量也是可以的。

Host 目标机器ip
  # 调试容器登录配置
  Port 22
  RequestTTY yes
  ProxyCommand ssh -o "ControlMaster=no" 跳板机IP nc -q 1 -w 30 %h %p
  RemoteCommand cd xxx ; bash --login

       上述配置中 RemoteCommand 是为了进行服务器后先执行某些命令,加入 bash --login 不仅是为了导入 /etc/profile 下的环境变量,同时也能停留在目标服务器中,没加 bash --login 将只会执行 cd 命令,然后退出。这里加入了 RequestTTY yes 是分配一个服务器终端,否则会报 mesg: ttyname failed: Inappropriate ioctl for device 的错误,如果不加 bash --login,那么 RequestTTY yes 应该也可以不加。

       上述配置也可以写成一条命令来执行,只不过会较长。

ProxyJump

       需要 OpenSSH 7.3 以上版本才可以使用 ProxyJump, 使用下列命令查看OpenSSH 版本:

ssh -V

ProxyJump 命令行使用方法:

ssh -J username@domain:port1,username@domain:port2  username@目标服务器IP -p 22

       可以直接使用上述命令通过跳板机直接登录内网机器,port 和 username 等选项可以不填,可根据需要进行填写。

       如果需要通过多个跳板机则以 , 分割:

ssh username@目标机器IP -p 22 -J username1@跳板机IP1:22,username2@跳板机IP2:22

       如果觉得每次都需要加上 -J 的配置很多麻烦,可以写到配置文件里。修改配置文件 ~.ssh\config,默认没有需要自己创建。增加以下内容:

Host tiaoban1    # 代表跳板机 1
    HostName 跳板机 1 的 IP
    Port 22    # ssh 连接端口
    User username1    # 跳板机 1 的用户名

Host tiaoban2    # 代表跳板机 2
    HostName 跳板机 2 的 IP
    Port 22    # ssh 连接端口
    User username2    # 跳板机 2 的用户名
Host 目标机器ip
  # 调试容器登录配置
  Port 22
  ProxyJump tianban1,tiaoban2

       ProxyJump 实现的效果和 ProxyCommand 实现的效果是一样的,不过 ProxyJump 使用起来要比 ProxyCommand 简单许多,尤其是在用多个跳板机进行跳转时,ProxyCommand 就会变得比较复杂。但是我目前还没有使用到多个跳板机,因此 ProxyJump 还没有尝试使用,不过先把使用方法贴在这里,以便后面使用是查看。

其他有用的命令

        1. 借助跳板机上传代码文件

scp -o "ProxyCommand ssh -p 22 [email protected] nc -w 1 %h %p" -P 22 -r [email protected]:/root/ .

如果 ~/.ssh/config 已有相关配置,则可以使用

scp [email protected]:/root/ .

或者使用 rsync 上传文件

rsync -av -e 'ssh -o RemoteCommand=none' --delete-after ~/project_path/ [email protected]:/root --exclude=.git  2> /dev/null
  1. 借助跳板机执行远程服务器中的命令
ssh -o "ProxyCommand ssh -o \"ControlMaster=no\" gwpek. nc -q 1 -w 30 %h %p" -p 22 "root@${addr}" -o 'RemoteCommand pwd' &> /dev/null

这里执行远程服务器中的命令借助了 RemoteCommand ,不过这里执行完后就会退出,并不会停留在远程服务起中,其中远程服务器命令执行之后的结果可以直接打印到本地。
这里的命令有时候也可以这样写:

ssh -o "ProxyCommand ssh -o \"ControlMaster=no\" gwpek. nc -q 1 -w 30 %h %p" -p 22 "root@${addr}"  'pwd' &> /dev/null

ssh 执行远程服务器命令可以直接在最后把想要执行的命令写上去,但是我自己尝试了之后有时候在 terminal 中无法执行,但是放到脚本里执行没问题,具体原因也没定位出来。但是 RemoteCommand 是可以的,不管是直接执行还是放到脚本里执行。我估计 RemoteCommand 就是为了替换直接写命令的那种方式而加入的。

总结

       还是熟能生巧,要多踩些坑,才能更快解决碰到的问题。

参考

标签:跳板,22,ProxyCommand,命令,ssh,服务器
From: https://www.cnblogs.com/xingyu666/p/17607840.html

相关文章

  • VScode+X11支持连接服务器时支持open3d、openCV、matplotlib等可视化
    背景连接服务器以后,想用open3d可视化点云、matplotlib画点图,但是一直不能用,原因也很简单,就是没有配置GUI传输显示,那肯定是要配置X11相关的东西。过程服务器确保服务器下载了xterm、xorg-x11-xauth两个包,不确定可以用dpkg-l加正则表达式查看,应该基本上都有。之后检查/etc/ssh/......
  • jenkins 远程 ssh 部署问题记录
    脚本执行失败注意需要在sh脚本里面添加source/etc/profile脚本执行失败排查可以在jenkins的ssh命令添加日志,然后查看日志排错nohupsh/xx/xx.sh>/xx/xx.log2>&1&脚本编写注意事项在脚本开头添加cd到当前目录,确保脚本内部读取的路径正常......
  • centos7中安装 ntp时间同步服务器
     001、查看ntp服务状态[root@PC1home]#cat/etc/redhat-release##系统版本CentOSLinuxrelease7.6.1810(Core) 002、启动ntp服务[root@PC1home]#systemctlstartntpd##没有安装ntpd服务Failedtostartntpd.service:Unitnotfound. 003、使......
  • 本地上传到服务器的视频不能在线播放怎么办?
    问题:我们在本地测试视频播放时,常常遇到这种情况,本地测试视频是可以正常播放的,但项目上传服务器后,视频就无法播放了,原因通常有以下几种,原因及解决方案如下:一、视频编码格式以MP4为例,虽然格式类型都是MP4,但视频编码格式有很多种,通常浏览器支持的为“H264”编码格式。解决方法:可以下载......
  • SSH原理与实践(三)安装和使用
    主页个人微信公众号:密码应用技术实战个人博客园首页:https://www.cnblogs.com/informatics/引言在之前SSH原理与实践系列文章中,我们主要讲解了SSH协议的原理部分。作为该系列文章的最后一篇,本文将对SSH实践部分进行介绍。好文回顾......
  • 服务器被攻击了怎么办?
    服务器被攻击是无法避免的,但是我们能通过做好防护措施,提高服务器的安全性,降低被攻击的几率。那么当服务器已经被攻击了,怎样才能降低损失呢?该怎样补救?断开网络全部的攻击都来自于网络,因而,在知道系统正遭到网络黑客的攻击后,首先要做的便是断掉服务器的网络连接,那样除开能断开攻......
  • 什么是无服务器架构技术
    什么是无服务器架构技术无服务器架构(ServerlessArchitecture)是jin年来逐渐兴起的一种软件架构方案,它采用了一种全新的方式来处理应用程序的部署、运行和扩展。与传统的服务器架构相比,无服务器架构具有很多优势,包括可扩展性、弹性、可靠性和安全性等。一、无服务器架构的基本概念......
  • 恒创科技:小程序服务器配置多大够用?
    ​了解小程序服务器的大小和要求对于确保小程序的高效运行非常重要。下面将介绍小程序服务器的大小和要求,帮助您选择合适的服务器。服务器费用服务器费用因服务器类型、配置和带宽等因素而异。一般而言,小型小程序服务器的年费用在500元至2000元之间。如果访问量增加......
  • RTSP/Onvif视频服务器LntonNVR(源码版)平台在Windows系统中使用挂载盘的具体操作流程
    LntonNVR平台默认的录像存储位置在LntonNVR/mediaserver/data/hls中,若用户有其他需求,也可以修改存储路径,将录像文件存储在其他指定的磁盘。具体可参照这篇文章:【操作教程】新内核版LntonNVR如何更改录像文件的存储位置?有用户反馈,录像文件更改存储路径后,存储录像文件的时间核对不上,......
  • 什么是无服务器架构技术
    什么是无服务器架构技术无服务器架构(ServerlessArchitecture)是jin年来逐渐兴起的一种软件架构方案,它采用了一种全新的方式来处理应用程序的部署、运行和扩展。与传统的服务器架构相比,无服务器架构具有很多优势,包括可扩展性、弹性、可靠性和安全性等。一、无服务器架构的基本概念......