linux远程重启windows
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux远程重启windows相关的知识,希望对你有一定的参考价值。
参考技术A安装步骤:
1、进入链接下载最新 OpenSSH-Win64.zip(64位系统),解压至C:\\Program Files\\OpenSSH
2、打开cmd,cd进入C:\\Program Files\\OpenSSH(安装目录),执行命令:
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
3、设置服务自动启动并启动服务:
sc config sshd start= auto
net start sshd
到此服务已经安装完毕,默认端口一样是22,默认用户名密码为Window账户名和密码,当然防火墙还是要设置对应端口允许通讯
修改设置:
通常linux下会修改ssh_config文件来修改ssh配置,但在安装目录并没有发现这个文件,查阅官方wiki后发现,原来是在C:\\ProgramData\\ssh目录下(此目录为隐藏目录)
端口号:Port 22
密钥访问:PubkeyAuthentication yes
密码访问:PasswordAuthentication no
空密码:PermitEmptyPasswords no
然后进入C:\\Users\\账户名\\.ssh目录,创建authorized_keys公钥文件(也可在ssh_config修改路径)(仅限7.7之前版本,7.9版本请看最后更新)
设置完成后重启sshd服务,接下来就可以使用Xshell等工具使用密钥连接了~
踩过的坑:
命令行不识别空格时:C:\\Program Files\\用C:\\Progra~1\\替代
Windows Service2012R2即使配置了.ssh/authorized_keys公钥,连接时依然显示没有注册公钥。。。
查阅了官方wiki判断可能是权限问题:Fix SSH file permissions
进入C:\\Program Files\\OpenSSH(安装目录),右键 FixHostFilePermissions.ps1【使用PowerShell运行】,命令行提示全选是,重启sshd服务后密钥连接正常
2019.5.17更新:
新部署服务器的时候,发现公钥无法注册,发现新版本有变动:
参考官方wiki:administrators_authorized_keys
Administrators用户组的用户连接公钥,默认位置为
C:\\ProgramData\\ssh\\administrators_authorized_keys
并且需要设置权限,在CMD中执行命令:
icacls administrators_authorized_keys /inheritance:r
icacls administrators_authorized_keys /grant SYSTEM:(F)
icacls administrators_authorized_keys /grant BUILTIN\\Administrators:(F)
修改ssh_config文件:
AuthorizedKeysFile %programdata%/ssh/administrators_authorized_keys
重启sshd服务,即可使用密钥登陆SSH
3. 安装expect 方法
https://blog.csdn.net/robertsong2004/article/details/38983259转自
6个Expect脚本示例
2014年09月01日 20:48:32 HaveFunInLinux 阅读数 7982
本文译至:http://www.thegeekstuff.com/2010/10/expect-examples/
Expect 脚本语言用于自动提交输入到交互程序。它相比其它脚本语言简单易学。使用expect脚本的系统管理员和开发人员可以轻松地自动化冗余任务。它的工作原理是等待特定字符串,并发送或响应相应的字符串。
以下三个expect命令用于任何自动化互动的过程。
send – 发送字符串到进程
expect – 等待来自进程的特定的字符串
spawn – 启动命令
请确保在您的系统上安装expect软件包,因为它不会被默认安装。 一旦安装后,你会看到expect解释器“/usr/bin/expect”。 一般来说,expect脚本文件具有.exp的扩展。
1. Expect “Hello World”范例
下面的expect脚本等待具体字符串“hello”。 当它找到它时(在用户输入后),“world”字符串将作为应答发送。
#!/usr/bin/expectexpect "hello"
send "world"
2. 等待的字符串超时
默认情况下,等待的超时时间为10秒。 如果你不为expect命令输入任何东西,将在20秒内超时。 您也可以更改超时时间,如下所示。
#!/usr/bin/expectset timeout 10
expect "hello"
send "world"
3. 使用Expect自动化用户进程
在Expect的帮助下,你可以自动化用户进程,并得到期望的输出。 例如,您可以使用Expect编写测试脚本来简化项目的测试用例。
下面的例子执行了额外的程序自动化。
#!/usr/bin/expectset timeout 20
spawn "./addition.pl"
expect "Enter the number1 :" send "12\\r"
expect "Enter the number2 :" send "23\\r"
interact
执行上面的脚本,输出结果如下所示。
$ ./user_proc.expspawn ./addition.pl
Enter the number1 : 12
Enter the number2 : 23
Result : 35
如果你写的代码没有interact命令,在这种情况下,脚本会在发送字符串“23\\r”后立即退出。 interact命令执行控制,处理addtion进程的作业,并生成预期的结果。
4. 在$expect_out变量中的匹配和不匹配的内容
在字符串匹配成功时expect返回,但在此之前它将匹配的字符串存储在$expect_out(0,string)。之前所收到的字符串加上匹配的字符串存储在$expect_out(buffer)。下面的例子展示了这两个变量匹配的值。
#!/usr/bin/expectset timeout 20
spawn "./hello.pl"
expect "hello"
send "no match : <$expect_out(buffer)> \\n"
send "match : <$expect_out(0,string)>\\n"
interact
hello.pl程序只是打印两行,如下图所示。
#!/usr/bin/perlprint "Perl program\\n";
print "hello world\\n";
如下所示执行。
$ ./match.expspawn ./hello.pl
Perl program
hello world
no match : <Perl program
hello>
match : <hello>
5. 自动化SU登录到其他用户帐户
Expect可以让你从程序中传递密码给Linux登录账号,而不是在终端输入密码。在下面的程序中,su自动登录到需要的账户上。
#!/usr/bin/expectset timeout 20
set user [lindex $argv 0]
set password [lindex $argv 1]
spawn su $user
expect "Password:"
send "$password\\r";
interact
如下所示执行上面的expect程序。
bala@localhost $ ./su.exp guest guestspawn su guest
Password:
guest@localhost $
运行上面的脚本后,从bala用户帐户登录到guest用户帐户。
6. SSH登录到另一台计算机
下面给出的expect程序项目可自动从一台计算机ssh登录到另一台机器。
#!/usr/bin/expectset timeout 20
set ip [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh "$user\\@$ip"
expect "Password:"
send "$password\\r";
interact
执行上面的expect程序如下所示。
guest@host1 $ ./ssh.exp 192.168.1.2 root passwordspawn ssh root@192.168.1.2
Password:
Last login: Sat Oct 9 04:11:35 2010 from host1.geetkstuff.com
root@host2 #
4. 我这边的简单命令为
脚本为: #!/usr/bin/expectset timeout 20set ip [lindex $argv 0]set user [lindex $argv 1]set password [lindex $argv 2]
spawn ssh "$user\\@$ip" "net start gscloud"expect "password:"send "$password\\r";
interact
执行的命令为:
./deploy/startwin 10.24.196.213 administrator Test1127?!Linux系统远程访问Windows系统
1、首先在虚拟机中开启Linux和win7两台电脑
2、编辑Linux的网卡,设置IP地址
按a进行输入,将ONBOOT=no改为yes,开启网卡,将BOOTPROTO=DHCP改为static手动,继续在下面添加IP地址,子网掩码和网关,输入完成按ESC键输入:wq保存退出
重启网卡
3、将win7的IP地址与Linux设置在同一网段
4、在虚拟机的设置里将Linux与win7的网络适配器都更改为仅主机模式
5、此时的Linux与win7是可以ping通的状态
用Linux ping win7需要将win7的防火墙关闭,包括后面远程win7也同样,在win7中点击控制面板,选择系统和安全
点击Windows防火墙
点击打开或关闭防火墙
将上下两个关闭Windows防火墙全部勾选上
6、由于之后需要用Linux远程win7,所以需要在win7中进行远程设置桌面右击电脑选择属性,点击远程设置
将允许远程协助连接这台计算机和允许运行任意版本远程桌面的计算机连接两个选项卡勾选上
7、在虚拟机设置中将Linux的光盘连接上
8、Linux中找到需要挂载的光盘的位置
9、用df -h可查看到所有的挂载信息
10、将光盘挂载到/mnt这个空文件夹中,空文件夹就行,也可以挂载到其他空文件夹中,再次用df -h可看到多出一条刚挂载信息
11、到/mnt这个文件夹中,可看到刚挂载上来的东西,我们需要安装的功能包在Packages这个文件夹中
12、用rpm安装三个功能包
13、最重要的rdesktop这个应用程序包用rpm安装的话会有不断的依赖关系,所以,我这里建立yum仓库进行安装,yum文件存放在/etc目录下。
14、到yum.repos.d中建立yum仓库,在yum.repos.d目录下看到默认的.repo文件,删除,自己新建abc.repo文件进行编辑
15、输入a进行编辑,输入以下内容,编辑完成保存退出
16、查看刚编辑的abc.repo文件,用yum list命令查看yum仓库是否可用
17、之后输入yum install rdesktop 用yum仓库安装rdesktop
18、输入y确认,安装完成如图
19、此时便可以使用rdesktop进行远程win7
20、输入用户名密码进行登录
21、登陆成功,可以对win7进行操作,切记在这之前一定要关闭win7的防火墙,否则登录不上
22、此实验完成。
以上是关于linux远程重启windows的主要内容,如果未能解决你的问题,请参考以下文章