一起养成写作习惯!这是我参与「掘金日新计划 · 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
回车,立即就可以登录到远程了。