最近每天加班,最先就是 9 点下班,最晚试过 12 点出大厦门口的,踏出门口的第一步,灵魂不禁自主地问了本身一句:「我 TM 是谁」。linux
在回答不了这个「宇宙级」难题之余,我相信,有不少奋战在开发一线的同窗跟我同样,渴望在日落以前可以下一次早班,去打一场酣畅淋漓的球,或者去见一面思慕已久的女神。算法
为了改变现状,只能从平常的开发环节下手,优化一些耗时费力不讨好没收获的环节,让它可以更加「傻瓜式」地运做,给咱们留下更多地时间去解决核心问题或者完成开发进度。今天,我就想硬磕「登陆远程服务器」这个环节。有没有以为在公司电脑上保存明文的帐号密码不安全,记在脑子里又每次要输入,天天还得重复登陆好几回,还浪费脑容量。vim
看到这里,若是咱们仍是手动 ssh 加用户名密码和 ip 地址登录的,要好好反思一下了,咱们是程序猿,可以躺着毫不坐着!那有没有一种更方便快捷的方式呢?安全
# 还这样的登录的,要打 pp 了
$ ssh username@ip
# 紧接着输入密码
复制代码
有,那就是不用密码去登录服务器,天天能节省下 30 分钟,早点下班,多打一盘 LOL 或者是王者荣耀那也是极好的!bash
第一次登陆远程服务器的时候,终端交互上,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 默认配置文件: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
复制代码
保存并退出,本地工做准备就绪。ui
接着登陆远程服务器,完成相对应的设置。
打开远程服务器上的 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 登陆命令后面,跟你要执行的命令便可。
只想今晚早点回家跑个步~