使用win10自带的ssh服务器

我太喜欢ssh了,因为它的功能实在太强大,而且几乎不占用啥资源。(PS:类似的软件:p7zip,tightvnc)。因此,无论是哪个系统,我总想着安装一个ssh的服务器。

之前我在虚拟机中安装了个win10, 虽然安装了tightvnc, 但并不喜欢用远程管理的方式去连接,因为占用带宽不说,操作也不方便,比如虚拟机内部的拼音输入法状态经常和外面的不相同。我还是喜欢控制台程序。

win10自带了ssh的客户端,在设置->应用和功能->可选功能->添加功能 中可以安装win10的 openssh 客户端和服务器端,安装完后,在控制面板->管理工具->服务 中找到openssh服务,设置为自动或者启动都可以运行。

openssh 的服务器运行只需要1.3MB的内存,相比于其他软件,可能需要按照内存倒着排序才能看的到。

关于win10 自带的openssh服务器的配置文件,在windows系统目录的Windows\System32\OpenSSH目录下的sshd_config_default文件,和配置linux一样。我比较喜欢把GatewayPorts 设置为yes, 懂得人都懂的这个功能。

自带的openssh客户端的配置,则是在用户目录下的。连上去默认的终端管理就是windows的cmd.

我虚拟机中的win10 看来可以卸载wsl了。

关于ssh 文件及目录权限

今天在整理ssh配置的时候,发现wsl2中的ssh无法配置成免密证书登录,奇怪的是,我另外一台却可以。 首先可以肯定的是两个的配置完全相同,连匹配的证书都用的是相同的,最后无奈,只能打开sshd_config 中的调试功能。

sshd_config中对应的调试开关如下:


# Logging
SyslogFacility AUTH
LogLevel DEBUG3

打开后,在/var/log/auth.log 中可以看到日志。。。。我的看到很多尝试登陆的日志。

找到几条相关的日志:


Aug 28 17:24:22 pipo sshd[604587]: debug1: trying public key file /home/test/.ssh/authorized_keys
Aug 28 17:24:22 pipo sshd[604587]: debug1: fd 5 clearing O_NONBLOCK
Aug 28 17:24:22 pipo sshd[604587]: Authentication refused: bad ownership or modes for directory /home/test
Aug 28 17:24:22 pipo sshd[604587]: debug1: restore_uid: 0/0
Aug 28 17:24:22 pipo sshd[604587]: debug1: temporarily_use_uid: 1000/1000 (e=0/0)
Aug 28 17:24:22 pipo sshd[604587]: debug1: trying public key file /home/test/.ssh/authorized_keys2
Aug 28 17:24:22 pipo sshd[604587]: debug1: Could not open authorized keys '/home/test/.ssh/authorized_keys2': No such file or directory
Aug 28 17:24:22 pipo sshd[604587]: debug1: restore_uid: 0/0
Aug 28 17:24:22 pipo sshd[604587]: debug3: mm_answer_keyallowed: publickey authentication test: RSA key is not allowed

ssh会从两个文件中读取公钥来判断, 如果一个没有就读取另外一个,同时,ssh还做了一件事情就是关于文件,文件夹的权限判断。

.ssh的目录权限必须是 0700 或者 0755

公钥及authorized_keys*必须是 0644

密钥文件必须是 0600

其实还有一个就是用户的目录文件,比如上面日志中的/home/test 目录, 必须属于用户并且为755

因为我的home目录windows的路径下复制过来的,所以权限全错了。修改了之后就可以使用证书登录了。

另外,ssh 从7.3(2016年8月1日发布) 的版本开始,在config文件中可以使用include指令了, 这样 可以把不同的主机进行分门别类的存放到不同的文件中,方便了很多。

而且,还可以在config文件中使用下面的两行指令来暂存密码登录:

ControlMaster auto
ControlPath /tmp/%r@%h:%p

加入后,输入密码连上某台主机后,再在新窗口中,连接相同主机的话,就不需要输入密码了。对我这种 经常需要一边打开文件编辑,一边编译,一边观察运行结果的人来说,便利不少

emacs的tramp连接远程挂掉的问题解决

大约从去年的年初开始,我通过emacs就没办法正常的通道ssh访问远程系统中的内容了。这 个问题一直困扰着我,以致于我都想完全切换到vim了,这也是我现在使用的配置中使用了 evil-mode的由来。

其实这个问题在我这边表现的比较怪异,比如,我通过pscp访问openwrt的路由器,则没有 问题,访问远程的某个服务器(ubuntu系统),也没有问题,访问raspberry pi,有问题, 访问远程windows中的cygwin(我开通了cygwin的ssh服务),有问题。总之,看上去既和 操作系统有些关系,又和一部分软件有关,我甚至使用了默认的安装也是相同的结果。

从去年年初到现在,问题就这么一直困扰着我,虽然我尽量避免这种情况,但心头始终牵挂 着。直到上周,我重新在考虑shell的问题的时候,发现了端倪。

很早之前从网上便获知,shell可能会引起一部分问题,但我所有的测试环境都使用的是相 同的shell: bash,关于相关shell的设置,我也做了制定,但都没有解决我的问题。上周我 在连接局域网中的电脑和阿里云的远程主机的时候,发现这两个都可以访问,局域网中的电 脑用的是ubuntu 12.04,而阿里云用的是14.04(没记错的话),而家里的e9卡片式电脑, 却不可以,e9卡片式电脑用的是ubuntu 12.04,三个用的都是bash,甚至版本都有相同的。 但我注意到,e9卡片式电脑中的shell的PS1部分出现的是带颜色的,而其他的两个都不是带 颜色的,而从emacs的*Messages*中来看,出现下面的日志:

Unable to load color “PaleYellow” [2 times] Tramp: Opening connection for rix@172.10.1.199 using pscp… Tramp: Sending command `plink -l rix -ssh 172.10.1.199 && exit || exit’

Tramp: Waiting for prompts from remote shell Tramp: Sending password Tramp: Sending command `plink -l rix -ssh 172.10.1.199 && exit || exit’ Tramp: Opening connection for rix@172.10.1.199 using pscp…done Unable to load color “PaleYellow”

我注意到了有一个颜色相关的,我不知道这个到底是什么,无论是远程还是本地,我都没办 法找到这个叫”PaleYellow”的颜色相关内容。不过, 我找到了远程主机中与shell的PS1相 关的内容:

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
  # We have color support; assume it's compliant with Ecma-48
  # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
  # a case would tend to support setf rather than setaf.)
  color_prompt=yes
    else
  color_prompt=
    fi
fi

如果注释掉force_color_prompt=yes这一行,PS1将不会出现颜色,而这样一来,emacs访问 远程也正常了。

原来问题在这儿。。。。。