ssh tips

主要介绍ssh的命令的相关实践以及典型的使用情况。

证书与ssh

关于证书,公钥,私钥的相关基本概念,可以参考之前的这篇(https原理以及服务端客户端通信的golang的本实现)。

在本机上记录ssh配置信息的地方具体是在~/.ssh/config文件中,里面主要记录的是,对于登录不同的host时,应该使用具体哪个私钥文件,比如在文件中进行如下配置

Host 01
HostName 10.10.10.01
User admin

之后在需要使用 ssh 01 或者 scp 或者使用其他需要用到 username@hostip 相关的命令的时候,就只需要使用01 来进行替代,这样就相当于是创建了快捷方式,确实方便了不少。

比如这个配置文件:

Host coding.net git.coding.net
IdentityFile ~/.ssh/codingrsa
Host github.com
IdentityFile ~/.ssh/git_rsa

就是说在与不同的主机服务进行ssh通信的时候,才用不同的私钥文件。在直接使用ssh命令的时候,可以通过-i参数来指定私钥文件的位置。

对于常常需要登录的机器,当然没有必要每次输入用户名和密码,只需要采用rsa的加密认证方式,把自己的公钥发给对方服务器的指定的文件夹中,当然操作也很简单,先通过ssh-keygen -t rsa 来在本机上产生公钥和私钥,默认情况下是生成在~/.ssh目录之下,之后只需要 ssh-copy-id -i 公钥文件路经 host别名这样就可以将本机的公钥发送到远程的服务器上,之后再使用ssh操作就可以直接登录了,大大提升效率。

再补充一个技巧就是hostname命令的使用,通常在多态机器上操作的时候,开了许多terminal用户名都是localhost很容器弄重复,可以登上去之后 hostname 这样操作,之后退出terminal再登上去之后,就现实的是alias name了,比较直接。

关于ssh隧道

这里主要记录下-L参数的使用

-L port:host:hostport

以上命令可以将本地机(客户机)的某个端口转发到远端指定机器的指定端口。工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接, 可以在配置文件中指定端口的转发, 只有 root 才能转发特权端口,IPv6 地址用另一种格式说明: port/host/hostport

一些使用的场景:比如想要对服务端的数据进行修改操作,但是服务器只能通过ssh秘钥认证的方式连接上去,这个时候可以使用-l参数,比如

ssh -p 58513 -L 4306:serverip:3306 wangzhe_10_10_220_56@123.59.140.26

这个时候直接连接本地的4306端口,就可以连接到服务端的数据库了,然后可以在本地的数据库服务中进行调试。

这个命令是说,通过隧道的模式连接到远程服务器的 58513 端口,如果不指定-p 的话,默认的是22端口。服务端的用户名和ip地址是wangzhe_10_10_220_56@123.59.140.26。注意,serverip是对于123.59.140.26这个机器有意义的。如果目标的server ip 就是 123.59.140.26 这个机器,那serverip就可以直接写成local host。如果123.59.140.26是当成跳板机使用的话,那么serverip可以是对于跳板机可见的一个内部的ip地址。

另外一个使用场景是通过paraview client链接在集群上运行的paraview server的时候需要用到ssh -L将一个本地机器(paraview client)运行的机器的端口,映射到集群上的server。具体内容在paraview vis相关的一个blog中有详细的介绍。

其他参数

-i 参数的使用: 通过-i 参数,可以指定在发送ssh请求时候所使用的私钥文件的地址。

推荐文章