远程办公有一段时间了,ssh远程登录服务器是必不可少的。一般人可能会去找XShell,然后有人喜欢Putty,MobaXTerm之类。其实Win10已经自带了ssh客户端和服务端了,简单使用的话不用麻烦去下别的。这里看下ssh客户端的使用,关键是对应的key权限问题。
安装
打开PowerShell,输入ssh三个字母,按Enter。
PS C:Userswangyueheng> ssh
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
[-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
[-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
[-i identity_file] [-J [user@]host[:port]] [-L address]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-Q query_option] [-R address] [-S ctl_path] [-W host:port]
[-w local_tun[:remote_tun]] destination [command]
打印出usage,这样就完事了。
如果报错找不到命令,那么就:设置-应用和功能-可选功能-添加功能,添加ssh客户端即可。
功能
不妨看一下Win10把这个ssh客户端放哪里了。
PS C:Userswangyueheng> where.exe ssh
C:WindowsSystem32OpenSSHssh.exe
打开这个文件夹,看看都有些什么。
scp.exe
sftp.exe
ssh-add.exe
ssh-agent.exe
ssh-keygen.exe
ssh-keyscan.exe
ssh.exe
看来除了ssh.exe还有别的非常有用的东西。例如生成key的keygen和拷贝文件的scp都有了。
ssh key
这里假设已经有了用于连接公司服务器的自己的私钥,例如一个名为id_rsa的文件。可以用-i指定路径,更好的是放在自己用户名下的.ssh文件夹里。
然后尝试登陆,可能会报错,其他方式登录也极有可能会报的,私钥文件权限太公开。就是如果别人也能轻松看到你的私钥(没有限制id_rsa文件的权限),那么ssh就忽略你这个私钥。
PS C:Userswangyueheng> ssh -p 30000 wangyueheng@1.2.3.4
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'C:Userswangyueheng/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "C:Userswangyueheng/.ssh/id_rsa": bad permissions
wangyueheng@10.246.254.81: Permission denied (publickey).
如果是Linux环境,一搜就会发现,对这种ssh "permissions are too open" error,需要执行一个
sudo chmod 600 ~/.ssh/id_rsa
让别人不可读写这个文件。
那么问题来了,Windows没有chmod命令。需要用别的方式改权限。
修改key权限
对id_rsa文件:右击-属性-安全-高级。这是我从公司电脑上复制下来的key,在我自己的电脑上看,属性是这样的:
首先,点击窗口左下角的“禁用继承”,然后删除“权限条目”里自己以外的人。搞完后像这样:
这时,这个私钥文件才为自己独有。这时就可以用这个登陆服务器了。
其他
一个非常有用的东西,在PowerShell里按Ctrl+R,输入ssh字样,然后不断按Ctrl+R,可以往上翻以前输过的带'ssh'字样的命令,和Linux Shell几乎一样,非常方便。
我经常本地写好代码后rsync到服务器,并且使用的是带密码(passphrase)的私钥,那么每次输入密码就很烦。如果是Linux Shell,使用ssh-agent就只用输一次了。
wangyueheng@PC-XZ:~$ eval $(ssh-agent)
Agent pid 16
wangyueheng@PC-XZ:~$ ssh-add
Enter passphrase for /home/wangyueheng/.ssh/id_rsa:
Identity added: /home/wangyueheng/.ssh/id_rsa (/home/wangyueheng/.ssh/id_rsa)
上面是在Win10 Store里安装的Debian WSL里输入的。
突然发现,Win10自带的ssh-agent.exe其实也是可以用的!使用上和Linux有点区别。
正常操作,直接执行以下ssh-agent.exe,会报错
PS E:Software> ssh-agent
unable to start ssh-agent service, error :1058
搜了一下发现,是有个对应的服务被禁用了
PS E:Software> Get-Service ssh-agent | Select *
Name : ssh-agent
RequiredServices : {}
CanPauseAndContinue : False
CanShutdown : False
CanStop : False
DisplayName : OpenSSH Authentication Agent
DependentServices : {}
MachineName : .
ServiceName : ssh-agent
ServicesDependedOn : {}
ServiceHandle :
Status : Stopped
ServiceType : Win32OwnProcess
StartType : Disabled
Site :
Container :
注意StartType是Disabled,就是说无法开启服务。再就是DisplayName是“OpenSSH Authentication Agent”。按win键输入service,打开“服务”,根据DisplayName找到这个服务,修改启动方式为“手动”。然后再执行ssh-agent.exe就不会报错了!
然后执行ssh-add.exe,应该可以正常使用了,不需要每次输入passphrase了。
PS E:Software> ssh-agent
PS E:Software> ssh-add
Enter passphrase for C:Userswangyueheng/.ssh/id_rsa:
Identity added: C:Userswangyueheng/.ssh/id_rsa (C:Userswangyueheng/.ssh/id_rsa)
为了使用rsync,不得不弃用了Win10自带的ssh。装好Debian,源改成中科大的http://mirrors.ustc.edu.cn,安装openssh和rsync。
另一个非常有用的东西,按住Shift,在文件夹空白处右击,菜单里有
可以直接打开PowerShell和Linux shell,工作目录就是当前目录。
而在Linux shell里(或PowerShell里,PowerShell还可以start .),直接
wangyueheng@PC-XZ:~$ explorer.exe .
(别漏了后面那个点)
就可以直接打开文件管理器!如果是Linux分区,那么看上去像挂了一个网络盘在Windows里;如果是Windows分区,那么直接就是正常的文件夹。这比虚拟机还要好用。