Contents

SSH 免密登录服务器

1. 在本地机器创建公钥

打开万能的终端,执行如下命令,无视一切输出,一路欢快地回车即可。

1
ssh-keygen -t rsa -C 'your email@domain.com'

-t 指定密钥类型,默认即 rsa ,可以省略

-C 设置注释文字,比如你的邮箱

2. 将公钥复制到ssh服务器

将前一步骤生成的公钥 ~/id_rsa.pub 文件,复制到ssh服务器对应用户下的 ~/.ssh/authorized_keys 文件,可以有多种方式,这里只介绍常用的三种。

1
2
brew install ssh-copy-id
ssh-copy-id username@hostname  #将username和hostname替换为你的ssh服务器用户名和IP
  • 当ssh服务器 username 用户目录下尚未有 .ssh 目录时使用此方式
1
cat ~/.ssh/id_rsa.pub | ssh username@hostname "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"
  • 通用方式
1
2
3
4
scp ~/.ssh/id_rsa.pub username@hostname:~/ #将公钥文件复制至ssh服务器
ssh username@hostname #使用用户名和密码方式登录至ssh服务器
mkdir .ssh  #若.ssh目录已存在,可省略此步
cat id_rsa.pub >> .ssh/authorized_keys  #将公钥文件id_rsa.pub文件内容追加到authorized_keys文件

3. 快捷登录

完成以上步骤后,即可使用以下命令直接登录ssh服务器,妈妈再也不用担心你记不住密码了

1
ssh username@hostname #将username替换为你的ssh服务器用户名,hostname替换为服务器的ip

但是,每次仍然需要输入 ssh username@hostname ,仍算不上最优的解决方案,要是能实现一键登录或一条命令登录最好不过了,下面来看看都有那些解决方法

  • ssh本身也提供了一种快捷的方式来解决这个问题,往 ~/.ssh/config 配置文件添加你的 ssh 服务器信息即可
1
vim ~/.ssh/config   #若没有该文件,直接新建即可

添加文件内容格式如下:

1
2
3
4
5
Host        alias #自定义别名
    HostName        hostname  #替换为你的ssh服务器ip或domain
    Port            port #ssh服务器端口,默认为22
    User            user #ssh服务器用户名
    IdentityFile    ~/.ssh/id_rsa #第一个步骤生成的公钥文件对应的私钥文件

保存文件退出后,即可使用别名登录ssh服务器

1
ssh alias #alias是你在~/.ssh/config文件配置的别名

若有多个ssh账号需要配置,只要在~/.ssh/config空行再写即可,如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Host        foo
    HostName        192.168.2.222
    Port            22
    User            test
    IdentityFile    ~/.ssh/id_rsa

Host        alias
    HostName    hostname
    Port        port
    User        user
  • 如果你本地终端使用的是zsh,那就太简单不过了,直接给zsh添加一条别名
1
2
3
echo "alias ssh-to-username='ssh username@hostname'" >> ~/.zshrc #将username和hostname替换为你的服务器信息
source ~/.zshrc   #重新加载更改后的zshrc文件
ssh-to-username   #使用别名,一条命令即可登录你的ssh服务器
  • 如果你本地终端使用的是iterm2还可以添加Profile实现一键登录,具体步骤此处略过 参考链接