EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

Linux新手入门第十七天——WinSCP非对称密钥登录(补充+实战)

接上篇——Linux新手入门第十六天——WinSCP使用密钥登录

 

服务器也是有公钥和私钥的。

只不过WinSCP这里,国内网上的绝大多数教程只设置服务器这边的允许连接,既没跟你解释RSA算法,也没跟你解释服务器默认有没

有密钥。

原因是默认你拥有这部分知识,因为学到这算是常识了

 

输入命令:

service ssh status

service ssh status

你可以看到,Linux至少我用的Ubuntu18.04版本是有SSH服务并启动了的。

 

我不是很确定是不是之前apt-get了ifconfig这个指令顺便下载了的还是原本就有的,之后再去验证吧。(好吧,之后验证了发现不是更新ifconfig下载下来的,记不清什么时候装上去的了)

 

既然有SSH服务,那么一般就有密钥或是证明身份的东西,这些是安全连接的基础,

连接未知服务器

我们来确认是否正确,

 

输入命令:

ls /etc/ssh/

ls /etc/ssh/

这里应该就是服务器的密钥所放的位置,从图中来看,默认好像是有3对,我们来看看是不是对应:

继续连接未知服务器

确实,看到了ssh-ed25519,可以确认这是服务器给公钥了。

点击了是,应该就会把这个公钥存下来,那么按理说,WinSCP应该有存放这些公钥的地方。

 

Google得到了以下内容:

Where are WinSCP sites stored?

It is typically located in C:\Users\username\ntuser. dat (or C:\Documents and Settings\username\ntuser. dat in Windows XP and older). Note that the file is usually hidden.

找了找,没发现,后来我觉得默认是放在WinSCP的根目录(结果也没找到)。

显然,这应该不是正确答案吧。

最后在 参考文档[3] 找到了答案,这个东西默认在注册表(可配置)

SSH钥匙在注册表

具体位置:

计算机\HKEY_CURRENT_USER\Software\Martin Prikryl\WinSCP 2\SshHostKeys

SSH注册表路径

如图所示,在这里看到了刚才的ssh-ed25519指纹。(你可以尝试删除它,那么下次连接的时候就会提示“是否将其主机密钥加入缓存”)

 

如果服务器的主机密钥与WinSCP缓存中的密钥不匹配,这就意味着服务器管理员已更改了主机密钥,服务器在特定情况下提供了不同的密钥,或者您实际上已连接到另一台伪装为服务器的计算机。

 

Q:什么叫不保存工作区的情况下关闭应用程序?

什么是WinSCP工作区

A:一般是因为你直接点了右上角,而不是关闭了一个连接标签:

WinSCP工作区

像这样先点1标记的关闭按钮,再点击右上角关闭,就不会出现以上警告框了。

 

Q:那么究竟什么是工作区?

A:工作区是可以同时保存多个Connection的,并且会保存最后一次访问所停留的路径。你可以选择创建一个桌面快捷方式用来快速打开工作区,或从WinSCP的左侧栏目进行选中后访问。


实战:

第一件事,先禁用SSH使用密码登录,具体请看→这里

SSH禁用密码登录

如图所示桔黄色部分的改动。

我们需要先生成RSA密钥,这里建议使用PuTTYGen+额外密码,具体的生成方式上一篇已经介绍过了。

然后需要把公钥放进.ssh文件夹里面,这个文件夹root文件夹下有,用户文件夹下也有,作用是你放在哪个文件夹,就让你以哪个用户登录。

 

具体步骤(在root用户下进行):

mkdir /root/.ssh

chmod 700 /root/.ssh

vim /root/.ssh/authorized_keys

打开刚才生成的public key 文件,复制

从AAAA开头至“---- END SSH2 PUBLIC KEY ----“

的所有内容,粘贴到/root/.ssh/authorized_keys 文件中,

并保证所有字符在一行,

然后,再在开头加上ssh-rsa+空格,注意这很重要!!!

注意开头加上ssh-rsa+空格

最后,确保authorized_keys的权限是600,

:wq保存并退出

 

 

打开WinSCP,新建连接,点击高级:

winscp证书登录方法

填充私钥文件路径:

WinSCP选择密钥登录

直接确认。

直接登录

输入完成IP就可以直接登录,如果你密钥还有额外密码的话会提示输入。

但一般情况下,免密登录。

 

尝试输入root:

WinSCP使用私钥尝试root登录

确定 - 提示输入密钥的密码:

rsa-key密钥认证

输入密码确定后即可登录。

 

尝试输入eksumic用户登录:

WinSCP尝试普通用户登录

服务器拒绝接受我们的密钥

会发现服务器拒绝接受我们的密钥,这是因为/home/eksumic/.ssh/authorized_keys并没有被创建,需要照抄一份。

注意拥有者权限

注意,这里有一个坑,千万不要直接复制文件,否则可读可写只属于root用户,你就过不了密钥验证了。

“owner”这个概念在Linux里面很重要。

Windows的用户可能不习惯这个设定,因为一直都是以管理员身份在玩,而且永远都是单用户。

 

需要额外提醒的是,每次创建新的连接的时候,需要重填一下密钥文件:

winSCP额外注意点

 

 

【目录】Linux新手入门——从理论到实战

 

参考文档:

[1] where are the key files of winSCP located!?

[2] How to find SSH/FTP server fingerprint with WinSCP

[3] How do I transfer my settings to another computer? How do I import/export my settings?

[4] What is Workspaces ? - from WinSCP Official manual

[5] [Linux] /home/USR/.ssh目录里什么时候需要添加authorized_keys文件

This article was last edited at 2023-04-21 22:45:17

* *