远程主机登录

Table of Contents


这里记录一下,如何登录远程主机,以及如何更方便登录。

1. 最普通的方法

例如我们有一个远程的主机,IP 地址为 52.10.199.62 ,username 为 ubuntu。

我们就可以通过 ssh:

ssh ubuntu@52.10.199.62

然后提示输入 用户名和密码。有时候密码很长的话,这一步就很不方便了。 我们就想能不能简化这种操作。确实是可以的。

2. 使用 SSH key 来登录

首先生成一个 ssh key,如果你想用 ~/.ssh 目录下的 key 也可以。

ssh-keygen -t rsa

然后会提示你选择一个文件去存储这个 key,默认是覆盖 ~/.ssh/id_rsa 这个文件。 一直按回车就好。

然后把生成的 public key 注册到服务器上。

ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@52.10.199.62

这一步完成了,我们就可以直接使用这个来登录

ssh ubuntu@52.10.199.62

有个地方需要注意,如果你不是使用默认的 .ssh/id_rsa 这个 ssh key,而是新起的一个名字,例如在~/.ssh 目录下叫 test.key,同时还会生成一个叫 test.key.pub 的 public key。

这时你要这样来登录

ssh -i ~/.ssh/test.key ubuntu@52.10.199.62

是不是还很麻烦?确实是的。 我们还可以简化操作。

3. 配置 ssh config

在上面的例子中,我们需要记住很多的东西。尤其是 ssh private key 还有 ip 地址这种东西。 如果你听说过 ssh 的 config,应该就知道如何做了。

在 ~/.ssh/config 中,我们添加如下配置

Host test
        HostName 106.75.57.80
        IdentityFile ~/.ssh/test.key
        User ubuntu

下面我们就可以这样登录了

ssh test

是不是简化了很多?这样就非常好了。 如果当你需要登录很多主机的时候,这种方式真的非常好。这让你从特定的 ip 中解脱出来了。

4. 还可以更简化?

到上面其实已经足够简单了,但是我还是太懒了,一个单词都不想多输。

于是,我打开了 .zshrc (因为我使用的是 zsh,如果你使用的是 bash,应该是 .bashrc 文件),添加了下面一句

alias lg='ssh test'

下次,我们直接输入 lg 就登录了。哈哈,大功告成。

5. 换种思路

如果说我们可以点点就能实现这种功能不知道你信吗?前提是你要使用 iTerm2,可以看这里了解 iTerm2。 我们首先在在 iTerm2 中添加一个新的 profile,如下选择 Command,输入命令。

iterm2.png

下次我们想要登录远程主机的时候直接打开这个新建的 profile,就会自动登录远程主机。这种方式会让你有种 ”iTerm2 还可以这样玩?“的感觉。

6. 一个非常有用的配置[update]

假如我的使用场景是这样的:在公司里,我需要使用 RSATOKEN + PASSCODE 来登陆公司的服务器,因为 token 每隔几秒就刷新一次,上面的方法就不太好用了。如果我要开 10 个 ssh 连接窗口,难道我要输入 10 次? 这里我知道一个简单的方法,在 windows 下有个工具可以做类似 copy session 的操作,在 mac 下用 iterm 我还没有找到好的方法, 但是可以通过配置一下 ssh config 实现。

做法很简单,在~/.ssh/config 下加入如下的配置:

Host *
  ControlMaster auto
  ControlPath /tmp/ssh_mux_%h_%p_%r
  ControlPersist 600

更多的细节可以看下这个文章: How To Reuse SSH Connection To Speed Up Remote Login Process Using Multiplexing

7. 其他相关的

我们可以使用 mosh 来代替 ssh,但是我没用过。

另外,关于 SSH key 登录的原理,可以看 这里,讲的还是很清楚的。