最近天天加班,最早就是 9 点下班,最晚试过 12 点出大厦门口的,踏出门口的第一步,灵魂不由自主地问了自己一句:「我 TM 是谁」。
在回答不了这个「宇宙级」难题之余,我相信,有很多奋战在开发一线的同学跟我一样,渴望在日落之前能够下一次早班,去打一场酣畅淋漓的球,或者去见一面思慕已久的女神。
为了改变现状,只能从日常的开发环节下手,优化一些耗时费力不讨好没收获的环节,让它能够更加「傻瓜式」地运作,给我们留下更多地时间去解决核心问题或者完成开发进度。今天,我就想硬磕「登录远程服务器」这个环节。有没有觉得在公司电脑上保存明文的账号密码不安全,记在脑子里又每次要输入,每天还得重复登录好几次,还浪费脑容量。
看到这里,如果我们还是手动 ssh 加用户名密码和 ip 地址登陆的,要好好反思一下了,我们是程序猿,能够躺着绝不坐着!那有没有一种更方便快捷的方式呢?
# 还这样的登陆的,要打 pp 了
$ ssh username@ip
# 紧接着输入密码
有,那就是不用密码去登陆服务器,每天能节省下 30 分钟,早点下班,多打一盘 LOL 或者是王者荣耀那也是极好的!
SSH 免密登录
第一次登录远程服务器的时候,终端交互上,linux 主机会提示是否记住「指纹」,也就是本机的身份。ssh 登录远程主机的时候会携带本机的 ssh 公钥,本机的 ssh 公钥一般位于 $HOME/.ssh/
,是公私钥成对出现的。如果没有,可以生成手动生成 rsa 算法加密的公私钥文件:
$ ssh-keygen -t rsa -C "your_email_name@email_server.com"
回车之后,会提示输入私钥的文件名,如果你直接回车,会自动默认生成为 $HOME/.ssh/id_rsa
,同时会生成一份匹配的公钥文件 $HOME/.ssh/id_rsa.pub
。
如果有自定义私钥文件名,那么需要配置本机在 ssh 登录远程服务器时候,指定到对应的私钥文件。打开 ssh 默认配置文件:
# 如果不存在,则会自动创建
$ vim ~/.ssh/config
追加入如下内容:
# remote_server_alias 是一个自定义远程服务器的别名,让你自己能清晰的区分
Host remote_server_alias
# 远程服务器的 ip 地址
HostName xxx.xxx.xxx.xxx
# 远程登录时候默认用户名
User root
# ssh 所使用端口,默认就是 22,所以这行可以不输入
Port 22
# 本地私钥文件路径
# 如果你在上一步有自定义了私钥的文件名,那么替换一下 id_rsa 就可以了
IdentityFile /Users/Hades/.ssh/id_rsa
保存并退出,本地工作准备就绪。
接着登录远程服务器,完成相对应的设置。
打开远程服务器上的 ssd 服务配置文件:
$ vim /etc/ssh/sshd_config
找到以下三项,并确保如下内容:
RSAAuthentication yes # RSA认证
PubkeyAuthentication yes # 公钥认证
AuthorizedKeysFile .ssh/authorized_keys # 公钥认证文件路径
PermitRootLogin yes # 允许 root 用户登录
如果有改动,则重启 sshd 服务:
$ systemctl restart sshd
# 或者
$ service sshd restart
最后一步,将本地生成的公钥的文件内容,粘贴到远程服务器的 $HOME/.ssh/authorized_keys
文件中。这里要声明一点,如果你是要对 root 用户进行免密登录,则 $HOME
应该为 /root
,那如果是其他的普通用户,则为 /home/xxx
。
拷贝本地公钥文件的内容:
$ cat ~/.ssh/id_ras.pub
# 打印完成后,全选拷贝
然后登录远程服务器,打开公钥认证文件路径:
$ vim ~/.ssh/authorized_keys
粘贴进刚才复制的内容,保存退出,并退出远程服务器的登录。
现在试试再登录远程服务器吧,不会在需要密码啦~
我就想一键搞定
完成上面的操作步骤后,貌似登录服务器的时候还需要输入一串命令:
$ ssh root@xxx.xxx.xxx.xxx
我懒啊,就想一键搞定怎么办?
如果你所使用的终端有所谓的设置「快捷键」,那么福音也就来了。
我用的是 Mac 上面的 iTerm2 终端神器,可以设置如下快捷键,以后我只需要按下 ⌃+⌘+1
就一键登录上去了,效率提升得不是一丁半点。
既然那么懒了,那就再过分一点吧。
我平时登录服务器,也就只去固定的路径查看下日志什么的,能不能让我一登录就达到指定的目录路径呢?免得我还要记住一串的路径,万一忘了,那就费事儿了。
有的。
登录远程服务器,打开 bash 终端交互的个人设置文件:
$ vim ~/.bash_profile
追加一句:
cd /path/tp/dest/dir
完成。
我连服务器都不想登录了
论懒癌的最高境界,「不是花最少的力气去做一件事,是我压根就不去做」!
是的,万一我们只需要在服务器上执行一条命令呢?我还大老远地整那么多事情干啥?
来吧,一条命令搞定它:
$ ssh root@xxx.xxx.xxx.xxx pwd
$ ssh root@xxx.xxx.xxx.xxx cd /services/logs && tail error.log -n 100
是的,ssh 登录命令后面,跟你要执行的命令即可。
只想今晚早点回家跑个步~