ssh 的若干用法合集

198 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

基础用法之连接远程服务器

如果你有一台远程服务器,或者局域网内的一台电脑,只要启动了sshd服务,你就能通过ssh命令远程登录上去。

# ssh user@x.x.x.x

上面的指令,默认sshd开放的端口是22, 如果不是22,请如下指定:

# ssh -p xxx user@x.x.x.x

当你回车之后,应该会出现一堆英文,然后让你输入yes/no.

如果此时,你输入no,当然这个过程就终止了。

输入yes之后,应该是让你输入密码。

不管你输入密码对错,请查看一下文件:

# cat ~/.ssh/known_hosts

这个文件是自动生成的,记录了客户端所连接过的所有远程服务器的一些信息。每一个服务器一行。

当有些时候,你死活连不上一个服务器的时候,你可以将这个服务器有关的行,删掉,再试试,有可能就能连上了。

注意:第二次再连接这个服务器,就不会再提醒你yes/no了。

在远程执行命令

如果仅仅想查看一下一台远程服务器的内存使用情况,那么是不用登陆上去的。

输入如下的指令

# ssh user@x.x.x.x free -h

前面还是正常的ssh连接,但是后面可以直接加想在远程执行的指令

这样,就不用登陆上去,而直接执行一些命令了,会方便很多。

在远程执行本地脚本

如果你有一个脚本(view.sh)写在本地,例如:

# cat view.sh
free -h
df -h
ls -lh

所谓在本地,就是在你的电脑上,就是指客户端,而不是放在远程服务器上。

此时,如何在远程服务器直接执行这个脚本呢?

有小伙伴说了,先把这个脚本拷贝到远程,然后:

# ssh user@x.x.x.x sh view.sh

不就行了,这样做行倒是行,不过就是麻烦了。

其实能直接在远程执行一个本地脚本的,如下:

$ ssh user@x.x.x.x < view.sh

或者你不喜欢重定向操作符:

$ cat view.sh | ssh user@x.x.x.x

在远程执行本地脚本,对于运维来说,是一种极其方便的手法。

给远程服务器起名字

如果你有一个远程服务器是专门用来放博客的,那么下面的用法是不是很舒服:

$ ssh blog

blog是自己起的名字,就代表那个远程服务器。

那么如何做到呢, 需要创建如下的文件:

$ touch ~/.ssh/config

然后在文件中写入:

Host blog
 HostName x.x.x.x
 Port xx
 User user

此时,blog这个别名就代表着这个远程服务器。

免密登录

每次登录或者执行命令,都需要输入密码,是很烦的。

所以可以通过秘钥来验证这个过程。

首先,你需要生成两个文件,私钥和公钥:

$ ssh-keygen -t rsa -b 2048 -C "随便写点什么"

然后一路回车即可。(可别把已有的覆盖了!!!!!)

默认生成的路径:

~/.ssh/id_rsa  # 私钥  
~/.ssh/id_rsa.pub # 公钥

然后,就是把公钥放到远程服务器,私钥就搁这不动。

改造一下~/.ssh/config文件:

Host blog
 HostName x.x.x.x
 Port xx
 User user
 IdentityFile ~/.ssh/id_rsa

注意,加了一行,指定了私钥的位置。

那么公钥放在服务器的哪里呢?

/home/${user}/.ssh/authorized_keys

注意上面的写法,就是放在具体的用户HOME目录下的.ssh目录里。

假设你的用户名叫 green, 那么就是这个文件:

/home/green/.ssh/authorized_keys

注意,这个文件,一行一个公钥,千万不要覆盖,而是在最后添加一行,将你的公钥内容复制粘贴进去。

如果你正确放置了这个公钥。

那么, 在本地:

$ ssh blog

回车,立即就可以登录到远程了。