SSH 登录配置与文件传输

SSH 是常用的远程登录协议/工具。无论是管理远程主机,混 GitHub,上BBS,还是折腾自家的路由器,都离不开 SSH。相比于 Telnet,SSH 可以更安全,也可以更方便。之所以说“可以”,是因为,想要安全而方便地使用 SSH,还是需要一些知识的。

约定

先做一个约定。

本文讨论的 SSH,是指 SSH 客户端而不是服务端。SSH 客户端软件,是 Linux/Mac 的命令行界面下的 ssh 命令,PuTTY 之类的图形界面客户端,原理相同,会在文末作简略介绍。

我们还约定,除了当前运行 SSH 客户端的本地主机(以下简称“本地主机”)外,还有两台远程主机,分别是:

  • 远程主机 remote, IP 地址12.34.56.78,SSH 端口52193,用户名admin,密码admin
  • 家庭路由器 router,地址 router.asus.com,SSH 端口22,用户名admin,密码admin

基本连接

如果想从本地主机远程登录 remote,最基本的办法是使用如下命令:

ssh admin@12.34.56.78 -p 52193

然后根据提示,输入密码,完成登录。

登录 router 稍简单。因为 router 的 SSH 服务使用了默认端口,所以无需手动指定。

ssh admin@router.asus.com

可惜许多 VPS 的 SSH 服务往往监听的都是个挺难记的端口,记忆负担较重。登录时还要输入密码,一次两次还好,需要频繁登录的时候也挺烦人。

歧途

到这里,有人就会想些简化登录的办法了。比如:

  1. 写个自动登录脚本,把地址端口用户名密码全都明文预先写在脚本里。这种方法需要一定的编程基础,费时费力,还有密码泄露风险,可谓事倍功半。
  2. 换个支持自动登录的图形界面客户端,比如 SecureCRT 或者“修改版”的 PuTTY。只是 SecureCRT 是要收费的,Linux/Mac 平台上没有,“修改版”的 PuTTY 天晓得他还修改了些什么,而且无论怎样,密码都要明文存储,并不安全。

更有甚者,我还见过某硬件论坛里有人(还是版主)教别人放着 SSH 不用,给路由器开 Telnet 服务,然后写了个 vbs 脚本玩自动登录的。结果安全性、便利性一样不沾,自找麻烦,真是以其昏昏使人昭昭。

Key

其实,SSH 协议本身就支持无密码登录,甚至无密码登录比密码登录的安全性还高,这就是基于秘钥的安全验证。

ssh-keygen -t rsa -b 4096 -C "your comment"

以上命令可以在本地主机的 ~/.ssh/ 目录下生成一对 RSA 钥匙,id_rsa 是私钥,id_rsa.pub 是公钥。私钥必须保密而公钥可以公开。把公钥添加到远程主机的 ~admin/.ssh/authorized_keys 中,就可以实现无密码登录。

生成钥匙对的过程中,会提示设置 passphrase。passphrase 可以留空,但是一旦私钥泄露,黑客就可以利用你的私钥任意登录,存在安全隐患;不留空的话,每次登录还是要像输入密码一样输入 passphrase。将私钥纳入 ssh-agent 管理可以解决上述问题。ssh-agent 的用法,详见《使用SSH Agent Forwarding》。如果你使用 Mac,苹果的钥匙串会自动帮你管理 passphrase。

需要注意的是,秘钥文件乃至整个 .ssh 目录(无论是本地主机还是远程主机),都有严格的权限限制,如果权限不正确,连接会被拒绝。什么样的权限限制呢?除了文件所有者外,其他用户不得修改(增加、删除、重命名).ssh 目录下的文件,不得阅读私钥的内容。这也很好理解,如果其他用户有了 .ssh 目录的写权限,就可以把远程主机上的 authorized_keys 随意替换成自己生成的公钥;如果其他用户可以阅读私钥,那私钥的保密性就荡然无存。所以,使用 SSH 连接之前,应该在远程和本地主机上执行以下命令:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa

config 文件

以上,我们解决了输入密码的问题。但是,登录时仍然要输入一长串用户名、地址、端口,不光是输入负担,也是记忆负担。现在,我们使用 config 文件进一步简化登录。

在本地主机的 ~/.ssh 目录下新建 config 文件,内容如下:

Host remote
    HostName 12.34.56.78
    User admin
    Port 52193

各项配置顾名思义,很好理解。现在,登录 remote 的命令简化为:

ssh remote

没有冗长的地址,没有难记的端口,也无需输入密码。

router 也可以如法炮制。可是如果 router 的连接使用了和 remote 不同的秘钥对呢?那就需要手动指定私钥文件了。

Host router
    HostName router.asus.com
    User admin
    IdentifyFile ~/.ssh/router.pem

/etc 目录下有一份 ssh_config 文件,功能与用户家目录下的 config 目录相同,但 /etc 下那个是全局的配置文件,如果二者不一致,家目录下的配置会覆盖全局配置。由于每个用户有不同的需求,因此不建议直接修改 ssh_config。不过,倒是可以学习一下其中的配置选项。

scp 和 sftp

sshscpsftp 都是 OpenSSH 软件包的组成部分。其中,scp 即 secure copy,是用来在本地和远程主机间复制文件的工具,可以看做是增强加密版的 cp,只不过 cp 是在本地文件系统中相互复制,scp 可以操作远程主机的文件系统,cp 只需要本地路径来定位文件,scp 还需要加上远程主机名;sftp 是 SSH 封装加密过的 ftp 工具。

换作以前,从远程主机 remote 向本地复制一份文件,需要这样:

scp -P 52193 admin@12.34.56.78:~/filename.txt ~/

然后输入密码,开始传输。

由于 scpssh 使用同一套配置,经过上面一番配置后,命令直接简化为:

scp remote:~/filename.txt ~/

是不是简单了很多?

PuTTY 和 WinSCP

图形化的 SSH 客户端有很多,免费的 PuTTY 是常用的一个。顺便提一句,下载 PuTTY 请去官网,最好不要去什么“软件中心”、“下载中心”下载来历不明的版本,非要下载,也请验证签名后再使用;也不要去下载什么汉化版、修改版,PuTTY 的汉化版曾经爆出过后门。

PuTTY 是不支持自动输入密码的。想要实现自动登录,唯一的正途就是秘钥登录:用 PuTTYgen 生成一对秘钥,Public Key(公钥)复制添加到远程主机的 authorized_keys 文件中,Private Key(私钥)导出妥善保管在本地。所谓妥善保管,是指保存在用户主目录 %HOMEPATH% 下的某个位置——如果随意放在 C 盘、D 盘的某个位置,其他用户很容易就看到私钥内容了,安全性何在?

然后,在 PuTTY 配置界面的 Connection -> SSH -> Auth 找到 Privaet key file for authentication,填入私钥位置,保存即可。

WinSCP 是图形化的 scp 工具,配置原理与 PuTTY 类似,就不加赘述了。


SSH 提供了安全的远程登录方式,稍加学习配置,可以让登录过程更加便捷。不要试图用歪门邪道的方式来获得便利性,也不要为了便利性而忽视安全性。重视安全可能并不会带来直接的利益,但忽视它,往往会造成巨大的损失。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容