前言
通常通过ssh实现远程主机的通信。一般有很多开源和收费的软件,提供图形界面,非常方便。但是有时,对于项目中特定的几个操作,直接包装成脚本可能更加方便。这时就需要直接执行ssh命令了:ssh,scp,sftp。
使用idea开发,可以参考
Tools->Start SSH Session...和Tools->Deployment->Browse Remote Host
安装ssh
安装ssh的方法一般有:
- 下载ssh安装包,解压安装
- 首先安装包管理工具scoop,再安装ssh
免密登录
ssh免密登录,需要把本机器的公钥复制到远程机器上。
是否有秘钥
首先查看本机器是否已经生成了秘钥。
cd ~/.ssh
ls
如果目录下有:
- id_rsa
- id_rsa.pub
说明本机器已经生成了秘钥。
生成秘钥
如果没有秘钥,则需要生成秘钥了。使用ssh-keygen生成:
ssh-keygen
注意,秘钥不要设置密码,不然ssh登录时还要输入秘钥的密码。
复制公钥
可能是免密登录的场景比较多吧,于是有了ssh-copy-id工具。
ssh-copy-id user@host
执行命令,发现报错了:
ssh-copy-id: line 59: grep: command not found
ssh-copy-id: line 59: head: command not found
这是因为windows不支持这些命令的原因,所以导致ssh-copy-id无法成功运行。
window运行linux命令
为了能运行linux相关命令,需要在windows上安装linux环境。一般想到是的Cygwin和MinGW,但是随着微软拥抱开源的力度加大,推出了Windows Subsystem for Linux,可以直接在windows上运行linux,毕竟官方推荐的,兼容性方便肯定好些吧。
安装完成后,wls文件系统的所在的目录是:
C:\Users\Admin\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs
安装模块PowerSSH
Install-Module -Name PowerSSH
开启wsl
Set-ModulePowerSSH
下载wsl并安装
参考安装教程。
查看ssh命令
Get-PowerSshCommand
运行ssh命令
安装好wsl之后,wls自带ssh相关命令,可以在powershell中直接运行。
wls中生成好秘钥后,执行ssh-copy-id命令,可以正常运行。
保存为ps1脚本
复制了公钥之后,就可以免密登录了。为了避免每次输入用户和主机名,可以考虑把命令封装成ps1脚本,并且可以考虑给不同的开发人员分配不同用户名的脚本。
ssh user@host
scp命令
在wls中使用scp命令时,可能会报ssh: Could not resolve hostname c: Name or service not known的错误。
scp -r 'c:\Users\Admin\Desktop\website' 'root@127.0.0.1:/root/abc'
这是由于scp命令把盘符理解为域名,导致的错误。解决的方法是使用./相对路径。