为了每天早 30 分钟下班,我这样登录服务器

2,845 阅读3分钟

最近天天加班,最早就是 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 登录命令后面,跟你要执行的命令即可。


微信公众号
只想今晚早点回家跑个步~