下载
https://github.com/PowerShell/Win32-OpenSSH/releases
 
 
问:为什么要用这个sshd?
答:
这是微软用,openssh官方的源码,
源码网址:
https://github.com/PowerShell/openssh-portable
被微软编译后的2进制程序。2进制程序上,有微软的签名。
win下,免费的sshd,是不是微软这个版本最新?并且开放源码?
不建议使用其他公司的闭源sshd,里面可能有后门。
而且收费的sshd,虽然软件比较新,但一般都是闭源的。
不建议使用,n年前的低版本sshd,软件太老有漏洞。
 
 
 
解压:可以解压到任意目录。
建议解压到:
d:\OpenSSH_Win64_7.9p1
不建议安装在c盘。
 
 
 
安装
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
 
服务名为:
sshd
显示服务名为:
OpenSSH SSH Server
powershell 传教士 原创文章 ,2019-04-23
 
 
sshd_config配置文件存储目录为
$env:ProgramData\ssh\

C:\ProgramData\ssh\
 
 
目的:
生成sshd_config等文件
动作:
启动并停止服务:
Set-Service -Name sshd -StartupType 'Automatic'
start-service sshd
stop-service sshd
 
管理员权限的powershell,更换sshd服务器的,主机秘钥
Remove-Item -path C:\ProgramData\ssh\ssh_host_*
cd d:\你的安装目录
ssh-keygen -A
注意:更换主机秘钥后,客户机需要删除,用户的known_host文件,如: /root/.ssh/known_hosts
 
 
问:如何更改sshd_config?
答:
这个文件存储在c盘,修改后保存不了。所以你应该
复制C:\ProgramData\ssh\sshd_config到d盘。
用记事本打开并更改,保存。
再复制回来。
这时文件权限坏了,但并不影响sshd服务启动。
 
问:ssh客户端公钥,添加到哪里?
答:
此版本的ssh客户端公钥,应该添加到这个文件中:
C:\ProgramData\ssh\administrators_authorized_keys
 
用管理员权限的powershell,开启防火墙22端口
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
 
 
 
用管理员权限的powershell,让powershell成为默认shell
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
 
 
用管理员权限的powershell,让powershell把远程发送来的字符串,识别为命令,而不是脚本名
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShellCommandOption -Value "/c" -PropertyType String -Force
 
 
 
目的:让(win,linux)ssh服务器,接收来自客户机【powershell的连接】
管理员权限运行powershell后,运行命令:
win,linux,客户机中的powershell--->ssh--->win服务器上的的sshd:
1下载
https://github.com/PowerShell/PowerShell/releases
 
 
2安装必须安装powershell6。powershell5.1不行。
如PowerShell-6.2.0-win-x64.msi
 
 
3目的:由于sshd不支持带空格的路径,所以要给它建立一个链接目录
New-Item c:\pwsh -ItemType SymbolicLink -Target 'C:\Program Files\PowerShell\6'
 
4目的:在sshd_config的非最后面行中,写入subsystem。在sshd_config文件最后面写入subsystem,则sshd启动不了。opensshd真是奇葩啊!
 
用管理员权限的powershell,在win服务器上的sshd上运行:
$f = "$env:ProgramData\ssh\sshd_config"
$f2 = Get-Content -LiteralPath $f
Set-Content -LiteralPath $f -Value $f2[0..7]
Add-Content -LiteralPath $f -Value 'Subsystem powershell c:\pwsh\pwsh.exe -sshs -NoLogo -NoProfile'
Add-Content -LiteralPath $f -Value $f2[8..$f2.length]
win,linux,客户机中的powershell--->ssh--->linux服务器上的的sshd
pwsh -c 'Add-Content  -Value "`nSubsystem powershell /usr/bin/pwsh -sshs -NoLogo -NoProfile" -LiteralPath /etc/ssh/sshd_config '
重新启动win上的sshd服务
restart-service sshd
问:从linux经ssh连接到win上的sshd,为什么要用powershell?而不是bash?
问:powershell经过ssh,远程运行命令,比bash强在哪?
答:
=============linux远程命令 & ps远程命令 对比例子============
任意sh ---> ssh ---> linux上的bash:
ssh aaa@1.1.1.1 "以用户aaa权限执行的,命令xxx"
 
win,linux中的powershell ---> ssh ---> linux上的powershell:

$a = 1
[scriptblock]$备份命令 =
{
Get-Date
$b = $using:a + 2 #引用客户机变量,需要用$using:
}
$连接1 = New-PSSession -HostName 1.1.1.1 -UserName root #手动输入密码或用-KeyFilePath 选项。还需要修改/etc/ssh/sshd_config
invoke-command -ScriptBlock { $备份命令 } -Session $连接1
============================================================
bash的远程命令,简单直接。就好像我左手这盘蛋炒饭,简单解饿,但是不够强。更适用于 简单远程命令场合。
你再看看我右手这盘盖饭好在哪?答:生菜垫底,萝卜雕花围边。
bash远程传递的是【字符串】,powershell传递的是【代码块】。特色是【对象垫底,大花括号围边】。
字符串传递到远程时,经常需要要转义。代码块不用。
代码块,支持多行,格式化,使代码美观。
变量名,函数名支持中文。
代码块中,支持引用客户端变量,一律加上【$using:】,即客户机上的【$a】,在服务器上叫【$using:a】
代码块中,支持引用服务器端变量,即服务器上的【$a】,在服务器还上叫【$a】
即使变量重名,两个$a也绝不会弄混。
强类型变量,在远程使用,无需序列化/反序列化。这点py不行。java不行。
ps用大花括号包围代码,不用单双引号,代码嵌套很容易。
而代码嵌套容易,使的ps的ssh远程,从server1(跳板机,堡垒机)经ssh进入server2,再ssh进入server3,进入33层ssh server执行命令很容易。而shell难。
远程代码天生不老稳定的,有时没反应,或卡住,或中途断了。遇到此情形,每行ps代码都可以在外面套上try-cacth,比shell更稳。
批量ssh,ps采用【多线程】,比bash用【多进程】快,时间准,省内存。
 
----------【测试】----------
先在win中的d盘,建立几个中文文件名。
从终端软件xshell中,连接:
win用户名
win密码
终端软件的编码,选unicode(utf-8),这点和连接linux相同。
 
从终端软件xshell中,发送测试命令:
$PSVersionTable
get-childitem d:\
dir 查看中文会不会乱码。
 
至此,win服务器安装完毕。
 
从客户机的powershell中,发送测试命令:
$服务器ip = '192.168.1.201'
$账户名 = 'xxxx'
[scriptblock]$测试命令 =
{
get-childitem d:\
}
$连接2 = New-PSSession -HostName $服务器ip -UserName $账户名
#这里将提示你输入密码
$要返回的内容 = Invoke-Command -ScriptBlock $测试命令 -Session $连接2
$要返回的内容
$要返回的内容.name # dir 返回的文件名
 
问:powershell的New-PSSession能把密码写在脚本中么
答:
不能。
 
 
问:ssh如何免密?
答:
使用用户私钥文件。
$连接3 = New-PSSession -HostName $远程ip -UserName $账户名 -keyfile c:\Users\userabcd\.ssh\id_rsa
 
 
 
问:ssh如何复制,用户公钥到服务器?
答:
https://www.cnblogs.com/piapia/p/10412550.html
 
 
客户机本地的ps1脚本,放在远程ssh+powershell服务器上执行
在客户机上:
Invoke-Command -FilePath d:\abc.ps1 -Session $连接4
 
 
客户机本地的命令,放在远程ssh+powershell服务器上执行
在客户机上:
Invoke-Command -ScriptBlock $测试命令 -Session $连接5
 
 
在远程sshd+powershell服务器上执行,命令,脚本
在客户机上:
Invoke-Command -ScriptBlock { get-date; d:\xxx.ps1 ;#或 /tmp/a.ps1 } -Session $连接6
 
问:如何scp文件?
答:
scp /tmp/abc.tar.gz   your_name@ip:d:\dir123
openssh官方现在不建议使用scp了。建议使用sftp。
 
 
问:如何sftp文件?
答:
用powershell的winscp第三方模块。
开源免费软件,支持图形,也支持命令行。win,linux通用。
install-module winscp
 
 
 

在win中,给powershell客户端,搭建sshd服务器。的更多相关文章

  1. win中Oracle简易客户端和plsql的配置

    连接数据库有2种方式:在本机安装Oracle数据库或者是安装一个oracle简易客户端 当然,简易客户端跟oracle数据库比较少了一些功能 连接方式: 1)简易连接 sqlplus scott/ti ...

  2. Mac上一条命令搭建web服务器

    实际测试工作中偶尔会需要搭建Web服务器环境,由于Mac OS X自带了Apache和PHP环境,只需要简单的启动就可以. 开启Apache 开启Web服务器的方法有两种(默认启动端口号是80): 打 ...

  3. (转)初学Git及简单搭建git服务器和客户端

    终于搞定,mac自己作为git服务器,mac也是客户端,如何免登 从另外一个linux服务器的上传公钥得到提示 ssh-copy-id -i ~/.ssh/id_rsa.pub git@192.168 ...

  4. [转]win server 2003 + IIS 6 搭建MVC 运行环境

    本文来自:http://c.jinhusns.com/bar/t-993 win server 2003 + IIS 6 搭建MVC 运行环境 上一篇 下一篇近乎_问阳 发表于:2014-01-07 ...

  5. sshd服务器搭建管理和防止暴力破解

    1.1 Linux服务前期环境准备,搭建一个RHEL7环境 1.2 sshd服务安装-ssh命令使用方法 1.3 sshd服务配置和管理 1.4 防止SSHD服务暴力破解的几种方式 1.1 Linux ...

  6. CentOS8.1中搭建Gitlab服务器

    依旧是写在前面的话♠:很多IT人从业N年也许都还没有亲自搭过一次Gitlab服务器,是不是?有木有?!通常都是背着自己的笔记电脑到一家公司入职,或入职后领到公司分配的电脑,然后分配了Git账号,拿了将 ...

  7. 【C#】MVC项目中搭建WebSocket服务器

    前言 因为项目需要,前端页面中需要不断向后台请求获取一个及一个以上的状态值.最初的方案是为每个状态值请求都建立一个定时器循环定时发起Ajax请求,结果显而 易见.在HTTP1.1协议中,同一客户端浏览 ...

  8. Linux-Rsync服务器/客户端搭建实战

    一.需求 每晚汇总各机器的操作日志,同步到主服务器进行日志分析. 二.基础知识 rsync 分为服务器端.客户端,服务器端搭建比客户端辛苦一些(也是很简单). rsync 服务器是指以 deamon ...

  9. 如何在win上搭建SVN服务器

    本博文转自:http://www.cnblogs.com/armyfai/p/3985660.html SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本, ...

随机推荐

  1. line-height各类属性值

    line-height支持属性值 1.normal(默认属性) 跟着用户的浏览器走,且与元素字体关联 normal值 = 字体大小/100 2.<number> 使用数值作为行高值.如:l ...

  2. MySQL explain执行计划优化

    https://www.linuxidc.com/Linux/2016-04/129965.htm

  3. Spark机器学习基础二

    无监督学习 0.K-means from __future__ import print_function from pyspark.ml.clustering import KMeans #from ...

  4. Asp.net 按钮幕布遮盖效果实现方式

    Asp.net button按钮点击后想要实现幕布效果来等待服务器端执行完成,这种需求虽说看起来很简单,但真实做起来并不是那么简单,涉及了很多细节点,而对于深入理解asp.net button生命周期 ...

  5. SpringIOC的概念理解、构造器注入、setter注入、p命名空间注入、IOC容器介绍与比较

    1.IOC概念理解 IOC(Inversion of Control)即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象 ...

  6. 面试被问之-----sql优化中in与exists的区别

    曾经一次去面试,被问及in与exists的区别,记得当时是这么回答的:''in后面接子查询或者(xx,xx,xx,,,),exists后面需要一个true或者false的结果",当然这么说也 ...

  7. 删除List集合中的元素方法

    List集合是我们平时使用的最多的集合了,一般用来存放从数据库中查询的对象数据,但有时我们会从中筛选不需要的数据,第一次使用这种方式: 使用增强for循环遍历,使用list的remove方法删除不符合 ...

  8. put与putIfAbsent区别

    put与putIfAbsent区别: put在放入数据时,如果放入数据的key已经存在与Map中,最后放入的数据会覆盖之前存在的数据, 而putIfAbsent在放入数据时,如果存在重复的key,那么 ...

  9. 纯css实现翻书效果

    前言 最近研究了一下css3的3D效果,写了几个demo,写篇博客总结一下实现的经过.PS:如果对transform-origin/perspective/transform-style这些概念还不了 ...

  10. Docker生态会重蹈Hadoop的覆辙吗?

    Docker生态会重蹈Hadoop的覆辙吗? http://mp.weixin.qq.com/s?__biz=MzA5NDg3ODMxNw==&mid=2649535024&idx=1 ...