当前位置:网站首页>(转)SSH 登录配置与文件传输
(转)SSH 登录配置与文件传输
2022-04-23 00:09:00 【zyb418】
https://www.jianshu.com/p/7793369eb593
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 [email protected] -p 52193
然后根据提示,输入密码,完成登录。
登录 router 稍简单。因为 router 的 SSH 服务使用了默认端口,所以无需手动指定。
ssh [email protected]
可惜许多 VPS 的 SSH 服务往往监听的都是个挺难记的端口,记忆负担较重。登录时还要输入密码,一次两次还好,需要频繁登录的时候也挺烦人。
歧途
到这里,有人就会想些简化登录的办法了。比如:
- 写个自动登录脚本,把地址端口用户名密码全都明文预先写在脚本里。这种方法需要一定的编程基础,费时费力,还有密码泄露风险,可谓事倍功半。
- 换个支持自动登录的图形界面客户端,比如 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
ssh、scp 和 sftp 都是 OpenSSH 软件包的组成部分。其中,scp 即 secure copy,是用来在本地和远程主机间复制文件的工具,可以看做是增强加密版的 cp,只不过 cp 是在本地文件系统中相互复制,scp 可以操作远程主机的文件系统,cp 只需要本地路径来定位文件,scp 还需要加上远程主机名;sftp 是 SSH 封装加密过的 ftp 工具。
换作以前,从远程主机 remote 向本地复制一份文件,需要这样:
scp -P 52193 [email protected]:~/filename.txt ~/
然后输入密码,开始传输。
由于 scp 和 ssh 使用同一套配置,经过上面一番配置后,命令直接简化为:
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 提供了安全的远程登录方式,稍加学习配置,可以让登录过程更加便捷。不要试图用歪门邪道的方式来获得便利性,也不要为了便利性而忽视安全性。重视安全可能并不会带来直接的利益,但忽视它,往往会造成巨大的损失。
版权声明
本文为[zyb418]所创,转载请带上原文链接,感谢
https://blog.csdn.net/zyb418/article/details/96028458
边栏推荐
- (转)通过外网远程访问Window Remote Desktop 远程桌面 Win10
- Daily CISSP certification common mistakes (April 22, 2022)
- (转)Aspose.words编程指南之DocumentBuilder二
- (转)Matlab R2014a 64位与Visual Studio2015的mex相关问题
- Programming 2022-02 KTV
- (转)Aspose.words编程指南之DOM树结构初识,Node类继承关系及说明
- Detailed explanation of kubernetes (VIII) -- resource allocation list of kubernetes
- How to use icy for behavioral tracking in mice?
- Vibrato tiktok
- OpenCV中保存不同深度图像的技巧
猜你喜欢

图像感受野的一些理解

【ACM】51. Queen n

大型企业SAP集成WMS系统方案流程

Detailed explanation of seven common query connections in MySQL

Reinstall windows10

归纳AI数据增强的方法

What are the interfaces of the switch? The article takes you to remember its name and function

条码WMS系统的架构

A ConvNet for the 2020s的总结

(转)Matlab R2014a 64位与Visual Studio2015的mex相关问题
随机推荐
常见的社群玩法盘点,你做的是哪一种?
Reinstall windows10
How can domestic engine cocos break through the jungle?
HyperMesh laminate composite case study notes
LeetCode 199. Right view of binary tree
Concurrent reachability analysis (three color marking method)
【ACM】51. N 皇后
L1-072 scratch lottery (20 points)
Waveform generator based on Multisim
Niuke bm41 Right view of output binary tree
Compared with the traditional anchor based method, fcos is unique
教你两分钟做出一个精美好用的404页面
Gets the range of the currently selected string
Literal aggregation
Nodejs+express登录鉴权并注册部分
componentWillUnmount卸载组件
【leetcode】27.移除元素
Vibrato tiktok
What are the target keywords?
Solve the problem of small samples in industrial defect detection