以前只知道一条命令:
ssh user@password
用来登录linux服务器,其实它还有好多高级功能。下面把最近用到的一些整理一下。
ssh服务的相关配置
配置端口、密钥对登录、root账号禁用等,之前整理过一份:
https://www.jianshu.com/p/7349b29281cc
使用SCP传输文件
1. 从本地复制到远程
scp local_file remote_username@remote_ip:remote_folder
2. 从远程复制到本地
scp remote_username@remote_ip:remote_file local_folder
端口转发
参考文章:
https://www.jianshu.com/p/50c4160e62ac
https://blog.csdn.net/nimasike/article/details/73289777
主要作用:
网络穿透
本地端口转发:
在本地(运行命令的机器上)起一个监听端口,把所有对该本地端口的访问转发到服务器。
ssh -L <local-port-to-listen>:<remote-host>:<remote-port> <sshserver>
例:
ssh -L 8080:localhost:80 root@192.168.1.101
可以用来突破防火墙限制访问
远程端口转发:
转发所有向远程端口的请求,到本地机器(执行命令的机器),再到目标机器。
可以让外网的机器访问内网的资源。
ssh -R <local-port-to-listen>:<remote-host>:<remote-port> <sshserver>
例:
在内网的机器上运行:
ssh -R 8080:localhost:8080 root@234.98.76.152
这样在外网机器上访问本地8080端口的请求会转发到内网的8080端口,然后再转发到外网的8080端口。
这样就可以进行类似在外网服务器拉取内网服务器上的代码之类的操作了。
注1:如果以上命令不加”-g”选项,那么SSH Client上的监听端口2323会绑定在127.0.0.1上,意味着只有SSH Client自己才能连上。加上”-g”选项之后,SSH Client才允许网络上其他机器连接2323端口。
注2:以上命令会生成一个shell,有时候并不符合我们的需要,因为多数时候我们只想要一个端口转发功能,挂一个shell是个累赘,而且shell一退出,端口转发也停了。这就是为什么我们需要”-N -f”选项的原因:-N 告诉ssh client,这个连接不需要执行任何命令,仅做端口转发-f 告诉ssh client在后台运行
注3:为了避免长时间空闲导致ssh连接被断开,我们可以加上”-o ServerAliveInterval=60″选项,每60秒向ssh server发送心跳信号。还有一个TCPKeepAlive选项的作用是类似的,但是不如ServerAliveInterval 好,因为TCPKeepAlive在TCP层工作,发送空的TCP ACK packet,有可能会被防火墙丢弃;而ServerAliveInterval 在SSH层工作,发送真正的数据包,更可靠些。
注4:如果不是以root身份设置端口转发的话,转发端口只能使用大于1024的端口号。
使用config文件管理连接
用户目录.ssh目录下的config文件,用来管理ssh连接;
主要作用是不用每次都输入完整命令,可以使用别名来连接服务器(服务器多了也记不住)。
官方文档:https://man.openbsd.org/ssh_config.5
常用配置:
Host ali //别名
User root //登录用户名
Hostname xxx.xxx.xxx.xxx //IP
IdentityFile ~/.ssh/id_rsa_fromlan1 //密钥文件
RemoteForward 222 127.0.0.1:222 //远程端口转发
配置完成后,使用命令:ssh ali 就可以完成登录
网友评论