SSH 简化配置

简介: 本文讲的是SSH 简化配置,假如你和我相似的话,或许你的日常就是登入登出六七个远程服务器(或者在那些日子里面使用本地虚拟机)。如果你和我更相像,对于记住n多用户名、远程地址和那些记住非标准连接端口以及本地端口发往远程机器和命令行选项感到头疼。
本文讲的是SSH 简化配置,

假如你和我相似的话,或许你的日常就是登入登出六七个远程服务器(或者在那些日子里面使用本地虚拟机)。如果你和我更相像,对于记住n多用户名、远程地址和那些记住非标准连接端口以及本地端口发往远程机器和命令行选项感到头疼。

shell 别名

好比你有个名为 dev.example.com 的远程服务器,它没有为无密码登录设置公钥和私钥。远程账户名为 fooey ,为了减少脚本式登录的次数,你决定把默认 SSH 端口从常规默认值22改成2200.这就像下面典型的命令一样:

$ ssh fooey@dev.example.com -p 22000
password: *************

还不错哈。

我们也可以使用公钥/私钥对让事情更简洁安全;我强烈建议使用 ssh-copy-id来移动你的公共密钥。它能够省去相当数量的文件/文件夹访问许可问题 $ ssh fooey@dev.example.com -p 22000 # Assuming your keys are properly setup…

现在这看上去还不算太坏。为了简化冗长的情况,你也可以在 shell 里面创建简单的别名。

$ alias dev='ssh fooey@dev.example.com -p 22000'
$ dev # To connect

这个方法相当漂亮:每当需要连接新服务器的时候,只要添加一个别名到你的 .bashrc(或者.zshrc 如果你和很棒的人在一起),那就是:

~/.ssh/config

不过,该问题还有更多优雅灵活的解决方案。进入 SSH 配置文件:

# contents of $HOME/.ssh/config
Host dev
    HostName dev.example.com
    Port 22000
    User fooey

这意味着我可以轻松地进行 $ ssh dev,选项可以在配置文件中读取。简单极了。让我们看看我们还能用简单的配置指令做什么。

从个人角度来说,我在各种服务器和设备上使用了相当多的公钥/私钥对,为了将密钥泄露事件发生之后的损害降到最低。例如,我有一个专门为 Github 账户设置的密码。让我们配置好特定密钥就可以用于所有 github 相关的操作了:

Host dev
    HostName dev.example.com
    Port 22000
    User fooey</p>
Host github.com
    IdentityFile ~/.ssh/github.key

使用带有 IdentityFile 的配置文件可以让我精确定位那个我希望用来给主机权限的私钥。你当然也可以轻松地指定命令行选项为”正常“的链接。

$ ssh -i ~/.ssh/blah.key username@host.com

但是,如果你想指定哪个身份来使用任意 git 命令时,带有 IdentityFile 的配置文件的使用差不多是你唯一的选择 。这也启发了基于每个项目或组织来进一步细分的的有趣设想。

Host github-project1
    User git
    HostName github.com
    IdentityFile ~/.ssh/github.project1.key</p>
Host github-org
    User git
    HostName github.com
    IdentityFile ~/.ssh/github.org.key</p>
Host github.com
    User git
    IdentityFile ~/.ssh/github.key

这意味着如果我想以我的组织认证克隆一个仓库的话,我能够使用以下的命令

$ git clone git@github-org:orgname/some_repository.git

更进一步

像所有有安全意识的开发者会做的那样,我为所有的服务器都架设了防火墙,使他们尽可能地受限;很多情况下,这意味着我留下来可用的端口只有80443(为web服务器),以及为 SSH 的22端口(无论我可能映射到欢笑的目的)。表面上看,这似乎防止让我使用像桌面 MySQL 图形客户端这样的东西,在远程服务器上,想要开放和访问的 3306 端口仍未知。然而,懂行的读者会清楚,一个简单的本地端口能省去很多事:

$ ssh -f -N -L 9906:127.0.0.1:3306 coolio@database.example.com
# -f puts ssh in background
# -N makes it not execute a remote command

这样就能把所有来自本地端口9906转入远程服务器dev.example.com端口3306,让我指向桌面图形用户界面到主机名(127.0.0.1:9906),让它表现得完全像是把3306端口全部暴露在远程服务器和直接设备上一样。

现在我不了解你,但是得记住表示标记和SSH选项的顺序真是令人难受。幸运的是,我们的配置文件可以帮您减负。

Host tunnel
    HostName database.example.com
    IdentityFile ~/.ssh/coolio.example.key
    LocalForward 9906 127.0.0.1:3306
    User coolio

意味着我可以轻松地进行:

   $ ssh -f -N tunnel

然后我本地端口转发能够使用我设置在隧道主机上的所有指令,十分顺畅。

作业

你可以在~/.ssh/config里面指定相当数量的配置选项,我强烈建议你常看网上的文档或者 ssh_config 手册页。你可以添加一些有趣/有用的东西:更改连接尝试的默认数量,指定本地环境变量在连接后传给远程服务器,改变默认连接尝试数量。甚至是使用*还有?的通配符来匹配主机。

我希望这些多少对你有用。如果你针对 SSH 配置文件有任何很酷的技巧,在评论中留下你的想法;我一直在寻找有趣的技巧。





原文发布时间为:2016年04月20日

本文来自云栖社区合作伙伴掘金,了解相关信息可以关注掘金网站。
目录
相关文章
|
3月前
|
分布式计算 Hadoop 网络安全
杨校老师课堂之集群内SSH免密登录功能配置
杨校老师课堂之集群内SSH免密登录功能配置
37 0
|
3月前
|
Shell 网络安全 开发工具
github多用户ssh配置
在Windows 10环境下,当需使用多个GitHub账号进行开发操作时,可通过生成多个SSH密钥对并配置SSH `config` 文件实现。步骤包括:1) 使用`ssh-keygen`命令为每个账号生成密钥对,保存在`C:\Users\&lt;USERNAME&gt;\.ssh`目录;2) 编辑`config`文件,设定每个Host对应的身份文件和用户信息,如果需要,配置代理;3) 验证通过`git clone`不同仓库来确保配置正确。
50 0
|
17天前
|
安全 网络协议 Shell
Github代码仓库SSH配置流程
这篇文章是关于如何配置SSH以安全地连接到GitHub代码仓库的详细指南,包括使用一键脚本简化配置过程、生成SSH密钥对、添加密钥到SSH代理、将公钥添加到GitHub账户以及测试SSH连接的步骤。
30 0
Github代码仓库SSH配置流程
|
23天前
|
网络安全 开发工具 git
拉取 gitee 代码,配置SSH,Please make sure you have the correct access rights
拉取 gitee 代码,配置SSH,Please make sure you have the correct access rights
29 1
|
25天前
|
Shell 网络安全 开发工具
Gerrit✨Gerrit服务器简介 与 配置SSH keys
Gerrit✨Gerrit服务器简介 与 配置SSH keys
|
1月前
|
安全 Shell 网络安全
告别繁琐密码,一键解锁GitHub高效秘籍!SSH配置大揭秘,让你的代码托管之旅飞起来!
【8月更文挑战第4天】在使用GitHub时,频繁输入账号密码颇为不便。采用SSH协议可提升安全性并简化流程。本文以问答形式指导你快速配置GitHub SSH:了解SSH优势、学会生成与添加SSH密钥及测试连接。通过简单的步骤,即可实现无缝代码推送与拉取,享受高效、安全的开发体验。记得保护好私钥并根据需要设置多个密钥对。
42 7
|
9天前
|
网络安全 Windows
在Windows电脑上启动并配置SSH服务
在Windows电脑上启动并配置SSH服务
26 0
|
17天前
|
Ubuntu Shell 网络安全
【Ubuntu】配置SSH
【Ubuntu】配置SSH
26 0
|
17天前
|
安全 Linux 网络安全
在Linux中,如何配置SSH以确保远程连接的安全?
在Linux中,如何配置SSH以确保远程连接的安全?
|
23天前
|
安全 Linux Shell
如何在 Linux 服务器上配置基于 SSH 密钥的身份验证
如何在 Linux 服务器上配置基于 SSH 密钥的身份验证
30 0