Linux VPS服务器开启SSH Key免密码登录博主使用SSH登录VPS一直习惯用复杂密码+非22端口，然而这些天发现吃灰很久的小鸡。CPU进程都是满的，使用SSH登录VPS查看CPU占用率，发现SSH密码已被黑客爆了并安装了挖矿程序导致VPS一直负荷运行。尝试几次卸载挖矿程序都失败了，最后以重装系统告终。可怕~赶紧换用Key秘钥登录。生成秘钥先用SSH+密码方式登录VPS,输入以下命令生成一对秘钥,默认回车即可ssh-keygen终端中会出现提示Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:cTSMnqP5zXAer21hc9UtPJA8ZU2HYdEUiFwTyna0Hjw root@debian The key's randomart image is: +---[RSA 2048]----+ | +oo=+B*+| | .o+=.=o.o| | ...=.E+ | | ++ o=o | | oS. .+ ..| | o . o . = o| | . * + o o | | . B + | | .* | +----[SHA256]-----+保存私钥使用cat命令查看VPS生成的私钥，在本机新建一个文本，将私钥保存下来并命名为“id_rsa”不要后缀名，将它放到你想放的位置，一般~/.ssh中cat /root/.ssh/id_rsa 或者使用scp命令将私钥id_rsa从远程复制到本地/Users/july/Downloads/路径下root@127.0.0.1自行替换用户@你的IPscp -P 22 root@127.0.0.1:/root/.ssh/id_rsa /Users/july/Downloads/配置公钥用SSH+Key登录,需将VPS的公钥名字改成authorized_keyscd /root/.ssh/ mv id_rsa.pub authorized_keys # 修改公钥为只有属主有读写权限(安全考虑) chmod 600 authorized_keys # 修改SSH目录为只有属主有读写执行权限(安全考虑) chmod 700 /root/.ssh开启 SSH+Key登录用vi命令编辑sshd_configvi /etc/ssh/sshd_config找到以下两个参数，如果没有可以自行加上去，前面如果有#需要先删除掉#注释RSAAuthentication no PubkeyAuthentication no将以上两个参数后的no改为yes即可 (一般默认就是yes不用改) 。关闭 SSH+密码登录用vi命令编辑sshd_configvi /etc/ssh/sshd_config找到以下这个参数，如果没有可以自行加上去，前面如果有#需要先删除掉#注释PasswordAuthentication yes将这个参数后的yes改为no即可SSH+Key登录SSH+Key配置好后就可以重启SSH服务，进行登录了/etc/init.d/ssh restart使用SSH+Key登录ssh -p aaa root@xxx.xxx.xxx.xxx -i ~/.ssh/id_rsa注意：[scode type="yellow"]aaa:端口 ~/.ssh/id_rsa:本机上私钥文件路径[/scode]如果用SSH+Key登录VPS服务器时,终端中显示下面内容:[scode type="blue"]Permissions 0644 for 'id_rsa' are too open.It is required that your private key files are NOT accessible by others.This private key will be ignored.[/scode]本机上的私钥文件权限太大,被忽略使用。在本机上执行以下命令,修改私钥文件的权限即可。chmod 0600 id_rsa
iTerm2 与 Zsh俗话说“工欲善其事，必先利其器”，作为一个长期在命令行下面工作的人，Mac那个自带的Terminal功能太弱了一些，长此用下去，必定是不能忍的。于是，终于轮到此篇的主角上场了：iTerm2 和 Zsh， 这次，我们来一场iTerm2和Zsh的体验之旅……iTerm and ZshiTerm2[scode type="blue"]iTerm2是一款完全免费的，专为 Mac OS 用户打造的命令行应用，当然，也是程序员们的最爱。iTerm2本身支持很多自定义化的设置，比如自定义配色，自定义快捷键，方便的水平和垂直分屏功能，等等…… 毫不避讳的讲，说它是如今Mac下最好的终端工具也不为过。当然，日常工作与开发中，用它替代Mac自带的Terminal也是不二的选择。有了终端利器iTerm2，当然还得配上一款顺手的shell。众所周知，如今用得最广泛的默认shell，就是bash了，因为它也是很多Linux发行版默认带的shell。作为默认自带的shell，其特点，也就是：特点不是很明显 -_-# 不太方便的地方是：可定制性和可扩展性有限，自动补全功能不够强大…… 所以，既然用上了iTerm2，还需要一款更为强大的shell来配合。首当推荐的就是Zsh了。[/scode]Zsh[scode type="green"]之所以叫Zsh，其含义是：The last shell you’ll ever need!可以理解为，一旦用上它，就别无所求了。跟Bash相比，Zsh的补全功能强大了许多，可以自动补全命令、参数、文件名、进程、用户名、变量、权限符，等等…… 另外，还支持插件，通过插件又可以扩展出许多功能来。既然有了Zsh，那Oh My Zsh又是啥呢？因为 zsh 的默认配置极其复杂繁琐，让人望而却步，直到有了Oh My Zsh这个开源项目，让zsh配置降到0门槛。而且它完全兼容 bash 。所以，我们可以理解为Oh My Zsh是一个方便你配置和使用Zsh的一个开源工具。掌握了这些姿势，随后我们可以开始动手配置我们逼格满满的终端环境了……[/scode]安装 iTerm2安装iTerm2比较简单，直接从官网下载安装即可。安装好之后，我们还需要进行一系列的设置才行。iTerm2 主题iTerm2支持许多的主题配色，可以自己定义，也可以参考网上现成的主题配色。我个人比较喜欢Solarized配色，因为可以配合Vim 里面的Solarized主题。推荐一些常用的主题配色的预设置文件下载地址：iTerm2 Solarized 配色iTerm2 配色合集网站iTerm2 配色合集GitHub地址这些配色预设置文件，可以直接导入到iTerm2中，然后直接在设置中选择即可iTerm2iTerm2 字体为了终端下能正确的显示fancy字符，需要安装powerline字体，这样fancy字符不至于显示为乱码。 GitHub上已经有制作好的Powerline字体，下载直接安装到系统即可。安装好之后，就可以选择一款你喜欢的Powerline字体了路径：Preferences -> Profiles -> Text -> Font -> Change Font[button color="success" icon="glyphicon glyphicon-save" url="https://github.com/powerline/fonts" type=""]powerline字体[/button]安装 ZshMac OS默认应该自带了zsh了，安装之前可以确认一下。 cat /etc/shells # List of acceptable shells for chpass(1). # Ftpd will not allow users to connect who are not using # one of these shells. /bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh /bin/zsh # 有`/bin/zsh`表明已经预装zsh了，没有的话，可以通过brew命令来安装。 brew install zsh接下来，我们需要安装的是OhMyZsh。安装Oh-My-ZshOhMyZsh的安装也比较简单，官网提供一键安装脚本。默认安装过后，使用的是robbyrussell主题。# 安装前把git curl命令给打上 brew install git curl # 安装Oh-My-Zsh sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" ```` ### Oh-My-Zsh 主题 [button color="success" icon="glyphicon glyphicon-save" url="https://github.com/ohmyzsh/ohmyzsh/wiki/Themes" type=""]oh-my-zsh主题[/button] 官网提供了多款[主题][7]在里面找到一款你喜欢的主题，把主题文件下载到 `~/.oh-my-zsh/themes` 里面，然后修改 `~/.zshrc` 文件里的`ZSH_THEME`项，把主题名字填入即可......ZSH_THEME="lambda-mod"......待配置妥当，看起来应该是这样的： ![OhMyZsh][8] ## Zsh 黑科技 ### 路径别名 需要在配置文件（通常是 .zshrc）中先定义好规则，形如： `hash -d sortcut_name=path` 配置应用后，直接使用 `~ sortcut_name` （甚至直接输 `sortcut_name` 回车就行了）就可以跳转到相应目录 ### 命令别名 通过在`.zshrc`中配置alias，可以方便的为其他的命令设置别名，这是个很不错的功能。因为我懒，平时甚至连敲命令也想偷懒，于是，我设置了很多alias。 比如跟git相关的：alias gs="git status"alias gsm="git summary"alias ga='git add'alias gd='git diff'alias gf='git fetch'alias grv='git remote -v'alias grb='git rebase'alias gbr='git branch'alias gpl="git pull"alias gps="git push"alias gco="git checkout"alias gl="git log"alias gc="git commit -m"alias gm="git merge"比如，要push提交到远程git仓库的时候，就不必老老实实的输入 `git push origin master` 了，只需要输入 `gps origin master` 即可。于是 `git pull` 也简化成了 `gpl` , `git commit -m` 也简化成了 `gc` 。 ### 切换目录 在Zsh中，可以通过输入 `.`号来跳转，比如： `直接输入.. 和 … 可以快速切换到上层和上上层目录 ` `直接输入n+1个点，可以往上层跳转 n 层` ### 进程id补全 Zsh的补全功能非常不错，除了一般的目录和文件名补全，还可以自动补全进程ID。比如，我们通常要kill掉一个进程，得先用 `ps -aux|grep process_name` 先拿到进程id，然后再 `kill pid` 来终止掉一个进程。在Zsh中可以直接这样： ![Zsh][9] ### 快速跳转 Zsh支持目录的快速跳转，我们可以使用 `d` 这个命令，列出最近访问过的各个目录，然后选择目录前面的数字进行快速跳转： ![Zsh][10] ### 目录名简写与补全 如果确切的知道我们要进入某一层目录，但是目录名比较长，没关系，Zsh帮你搞定！ 比如我们要进入到 `~/workspace/src/dict`，我们只需要输入每个目录的首字母就行，然后再TAB键补全，Zsh会帮你搞定剩下的： ![Zsh][11] ### 常用命令参数补全 Zsh在行的，不光是目录名的补全，嗯，常用的命令参数，它也能给你提供参考。重复上一条命令，输入 `r` ，可以很便捷的重复执行上一条命令。 ![Zsh][12] ## Zsh 常用插件 Zsh支持插件，通过插件扩展可以实现许多方便的功能。这里介绍一下我常用的几个Zsh插件 ### autojump autojump也是一个目录直接快速跳转的效率工具，它会自动记录之前访问过的目录，并计算权重。用法也很简单 `j directory_name` 即可。比如我要访问 `~/workspace/src` ，只需要输入 `j src` 就行了…… #### 安装 autojump安装autojumpbrew install autojump### sublime 可以方便的在Zsh终端中调用Sublime Text打开文件，比如输入 `st README.md` 就可以调用机器上安装的Sublime Text打开当前目录的README.md文件进行编辑操作。 ### web-search 一个方便的终端搜索工具，支持大多常用的搜索引擎，比如： 输入 `baidu hhkb pro2` 直接在浏览器打开百度搜索关键字”hhkb pro2” 输入 `google minila air` 直接在浏览器打开Google搜索关键字”minila air” 通过查看这个插件的[代码][13]，可以看到支持的搜索引擎，包括baidu, google, bing, yahoo 等等…… 当然，还有广大程序化最爱的GitHub哦！ ### zsh-autosuggestions [zsh-autosuggestions][14]是一个自动提示插件，是个很有意思也很高效的插件。能记录平时你输入过的命令，下次再输入的时候，它会提前提示你，方便懒人。如果是你需要的命令，直接 `Ctrl+F` 搞定，来直接看看效果吧： ![Zsh][15] #### 安装zsh-autosuggestions安装zsh-autosuggestionsgit clone https://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/zsh-autosuggestions激活zsh-autosuggestions（注意自己安装的路径）source ~/.oh-my-zsh/zsh-autosuggestions/zsh-autosuggestions.zsh### zsh-syntax-highlighting [zsh-syntax-highlighting][16]是一个代码高亮插件。当命令在zsh提示符下键入到交互式终端时，它可以突出显示命令。这有助于在运行命令之前对其进行检查，尤其是在捕获语法错误时。 #### 安装zsh-syntax-highlighting安装zsh-syntax-highlightinggit clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/zsh-syntax-highlighting激活zsh-syntax-highlighting（注意自己安装的路径）source ~/.oh-my-zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh### extract 一个功能强大的解压插件，所有类型的文件解压通过一个命令x全搞定，再也不需要去记tar后面到底是哪几个参数了。 比如： `x backup.tar.gz` 或者 `x temp.zip` ## iTerm 背景特技 iTerm还支持显示背景图，这样我们还可以把单调的终端界面配置得更加酷炫，比如可以这样： ![iTerm][17] 还可以这样： ![iTerm][18] **配置方法：**`Preferences -> Profiles -> Window -> Background Image` 选择一个你喜欢的背景，然后通过Blending调整图片背景的透明度。 ## .zshrc文件 这是我的.zshrc配置文件，仅供参考If you come from bash you might have to change your $PATH.export PATH=$HOME/bin:/usr/local/bin:$PATHPath to your oh-my-zsh installation.export ZSH="/Users/july/.oh-my-zsh"Set name of the theme to load --- if set to "random", it willload a random theme each time oh-my-zsh is loaded, in which case,to know which specific one was loaded, run: echo $RANDOM_THEMESee https://github.com/ohmyzsh/ohmyzsh/wiki/ThemesZSH_THEME="ys"Set list of themes to pick from when loading at randomSetting this variable when ZSH_THEME=random will cause zsh to loada theme from this variable instead of looking in ~/.oh-my-zsh/themes/If set to an empty array, this variable will have no effect.ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )Uncomment the following line to use case-sensitive completion.CASE_SENSITIVE="true"Uncomment the following line to use hyphen-insensitive completion.Case-sensitive completion must be off. _ and - will be interchangeable.HYPHEN_INSENSITIVE="true"Uncomment the following line to disable bi-weekly auto-update checks.DISABLE_AUTO_UPDATE="true"Uncomment the following line to automatically update without prompting.DISABLE_UPDATE_PROMPT="true"Uncomment the following line to change how often to auto-update (in days).export UPDATE_ZSH_DAYS=13Uncomment the following line if pasting URLs and other text is messed up.DISABLE_MAGIC_FUNCTIONS=trueUncomment the following line to disable colors in ls.DISABLE_LS_COLORS="true"Uncomment the following line to disable auto-setting terminal title.DISABLE_AUTO_TITLE="true"Uncomment the following line to enable command auto-correction.ENABLE_CORRECTION="true"Uncomment the following line to display red dots whilst waiting for completion.COMPLETION_WAITING_DOTS="true"Uncomment the following line if you want to disable marking untracked filesunder VCS as dirty. This makes repository status check for large repositoriesmuch, much faster.DISABLE_UNTRACKED_FILES_DIRTY="true"Uncomment the following line if you want to change the command execution timestamp shown in the history command output.You can set one of the optional three formats:"mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"or set a custom format using the strftime function format specifications,see 'man strftime' for details.HIST_STAMPS="mm/dd/yyyy"Would you like to use another custom folder than $ZSH/custom?ZSH_CUSTOM=/path/to/new-custom-folderWhich plugins would you like to load?Standard plugins can be found in ~/.oh-my-zsh/plugins/*Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/Example format: plugins=(rails git textmate ruby lighthouse)Add wisely, as too many plugins slow down shell startup.plugins=(gitfast autojump sublime web-search extract)source $ZSH/oh-my-zsh.shUser configurationexport MANPATH="/usr/local/man:$MANPATH"You may need to manually set your language environmentexport LANG=en_US.UTF-8Preferred editor for local and remote sessionsif [[ -n $SSH_CONNECTION ]]; thenexport EDITOR='vim'elseexport EDITOR='mvim'fiCompilation flagsexport ARCHFLAGS="-arch x86_64"Set personal aliases, overriding those provided by oh-my-zsh libs,plugins, and themes. Aliases can be placed here, though oh-my-zshusers are encouraged to define aliases within the ZSH_CUSTOM folder.For a full list of active aliases, run alias.eval "$(thefuck --alias)"alias y="ydict"alias tmux="tmux -2"alias ssh="ssh -X"alias s="ssh -X"alias md="mkdir -p"alias rd="rmdir"alias df="df -h"alias mv="mv -i"alias slink="link -s"alias l="ls -l"alias la="ls -a"alias ll="ls -la"alias lt="ls -lhtrF"alias l.="ls -lhtrdF .*"alias grep="grep --color=auto"alias cd..="cd .."alias cd...="cd ../.."alias cd....="cd ../../.."alias ..="cd .."alias ...="cd ../.."alias ....="cd ../../.."alias zb="cat /dev/urandom | hexdump -C | grep --color=auto \"ca fe\""alias mtr="/usr/local/bin/mtr"alias gs="git status"alias gsm="git summary"alias ga='git add'alias gd='git diff'alias gf='git fetch'alias grv='git remote -v'alias grb='git rebase'alias gbr='git branch'alias gpl="git pull"alias gps="git push"alias gco="git checkout"alias gl="git log"alias gc="git commit -m"alias gm="git merge"alias pro="proxychains4"alias gb="go build"For dockeralias dm="docker-machine"alias di="docker images"alias dps="docker ps"alias dsp="docker stop"alias ds="docker start"alias dl="docker logs --tail=50"alias drm="docker rm"alias drmi="docker rmi $(docker images --filter "dangling=true" -q --no-trunc)"alias kc="kubectl"alias -s go=vialias -s html=vialias -s rb=vialias -s py=vialias -s txt=vialias -s ex=vialias -s exs=vialias -s js=vialias -s json=vialias for proxyalias proxy="export ALL_PROXY=socks5://127.0.0.1:1080"alias unproxy="unset ALL_PROXY"alias ip="curl -4 ip.sb"alias ipv6="curl -6 ip.sb"Example aliasesalias zshconfig="mate ~/.zshrc"alias ohmyzsh="mate ~/.oh-my-zsh"Load zsh-autosuggestions.source ~/.oh-my-zsh/zsh-autosuggestions/zsh-autosuggestions.zshLoad zsh-syntax-highlighting.source ~/.oh-my-zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh### 完结 iTerm和Zsh的配置就暂且介绍到这里吧，其实介绍到的也只是它们功能中我比较常用的，还有更多的功能等着你去发现。有了这些称手的工具和配置，我们就可以更加高效的去完成日常的编码和运维工作了。当然，此篇文章也不会就此为止，平常使用的过程中如果有新的心得和体会，我会持续更新…… 文章参考：[iTimothy][19] [1]: http://storage.yangwenqing.com/Website/images/OhMyZsh.jpg [2]: https://github.com/altercation/solarized [3]: http://iterm2colorschemes.com [4]: https://github.com/mbadolato/iTerm2-Color-Schemes/tree/master/schemes [5]: http://storage.yangwenqing.com/Website/images/20200302195641.png [6]: http://ohmyz.sh/ [7]: https://github.com/ohmyzsh/ohmyzsh/wiki/Themes [8]: http://storage.yangwenqing.com/Website/images/20200302195753.png [9]: http://storage.yangwenqing.com/Website/images/20200302195821.gif [10]: http://storage.yangwenqing.com/Website/images/20200302195842.gif [11]: http://storage.yangwenqing.com/Website/images/20200302195905.gif [12]: http://storage.yangwenqing.com/Website/images/20200302195927.gif [13]: https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/web-search/web-search.plugin.zsh#L3-L24 [14]: https://github.com/zsh-users/zsh-autosuggestions [15]: http://storage.yangwenqing.com/Website/images/20200302200009.gif [16]: https://github.com/zsh-users/zsh-syntax-highlighting [17]: http://storage.yangwenqing.com/Website/images/20200302200036.png [18]: http://storage.yangwenqing.com/Website/images/20200302200052.png