转载于:http://blog.csdn.net/carolzhang8406/article/details/6760430   https://blog.csdn.net/angel_xiaa/article/details/52355513 有关freeSSHd的用法写的很清楚

windows由于没有默认的ssh server,因此在允许ssh之前需要先安装ssh server。

下载freeSSHd

http://www.freesshd.com/?ctt=download

安装
直接执行freeSSHd.exe就可以进行安装了(用户一定要有管理员权限),安装过程中freeSSHd会问你

Private keys should be created. Should I do it now?

这是问你是否需要现在创建私钥,回答是

Do you want to run FreeSSHd as a system service?
这是问你是否希望把freeSSHd作为系统服务启动,回答是之后就安装完成了。

安装完成之后,双击freesshd图标(桌面或开始菜单),不会直接打开配置界面,而是需要在任务栏的“显示隐藏图标”(正三角图标)处右键freessh图标,选择setting。

配置用户名和密码:(java代码中连接的用户名和密码)

检查freesshd server status状态。切换至“server status”标签页,查看“SSH server is running”是否打钩,如果没有,点击下方连接检查,如果报错“the specified address is already in use”,则是由于安装时询问“Do you want to run FreeSSHd as a system service?”选择了“是”导致的,只需要在services.msc中将该服务停掉,再在配置界面启动,显示为打钩状态即可。或者在任务管理器-服务,停掉FreeSSHDService在点击启动服务

Java代码如下: 

SSHWindows.java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class SSHWindows {
private static final Logger log = LoggerFactory.getLogger(SSHWindows.class);
  
public static String SERVERIP = "192.168.27.209";
public static String SERVERUSERNAME = "admin";
public static String SERVERPWD = "12345678";
    public static void execWinShell(String script){
try{
//建立连接
Connection conn= new Connection(SERVERIP);
log.info("set up connections");
conn.connect();
//利用用户名和密码进行授权
boolean isAuthenticated = conn.authenticateWithPassword(SERVERUSERNAME, SERVERPWD);
if(isAuthenticated ==false)
{
throw new IOException("Authorication failed");
}
//打开会话
Session sess = conn.openSession();
//执行命令
sess.execCommand(script);
log.info("The execute command output is:{}", script);
InputStream stdout = new StreamGobbler(sess.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout,"gbk"));
while(true)
{
String line = br.readLine();
if(line==null) break;
log.info(line);
}
log.info("Exit code "+sess.getExitStatus());
sess.close();
conn.close();
log.info("Connection closed");
}catch(IOException e)
{
log.info("can not access the remote machine");
}
}
}

以上代码依赖于ssh2的jar包,pom.xml里配置依赖包

<!-- https://mvnrepository.com/artifact/ch.ethz.ganymed/ganymed-ssh2 -->
<dependency>
<groupId>ch.ethz.ganymed</groupId>
<artifactId>ganymed-ssh2</artifactId>
<version>build210</version>
</dependency>

Java使用SSH远程访问Windows并执行命令的更多相关文章

  1. java使用ssh连接Linux并执行命令

     方式1:通过设置账号密码和链接地址 maven pom.xml配置: <dependency>         <groupId>com.jcraft</groupId ...

  2. shell脚本批量ssh登陆主机并执行命令

    shell脚本批量ssh登陆主机并执行命令 今天在客户现场遇到了这个问题,客户没有管理工具,无法批量登陆主机下发命令,几个个C段啊,让我一个一个登陆,.................. 所以写了个s ...

  3. python paramiko实现ssh上传下载执行命令

    paramiko ssh上传下载执行命令 序言 最近项目经常需要动态在跳板机上登录服务器进行部署环境,且服务器比较多,每次完成所有服务器到环境部署执行耗费大量时间.为了解决这个问题,根据所学的执行实现 ...

  4. JDK1.6 1.7 1.8 多版本windows安装 执行命令java -version 版本不变的问题

    现在Windows的java安装已经没有解压版本,Oracle官方也不会再提供了,只有安装程序 所以每当安装一次JDK,都会将 java.exe.javaw.exe.javaws.exe三个可执行文件 ...

  5. Python通过ssh连接服务器并执行命令

    [本文出自天外归云的博客园] 脚本示例如下: # coding:utf-8 import time,paramiko,re,StringIO def exec_shell(command): ''' ...

  6. ssh模仿ansible批量执行命令的功能

    #!/bin/bash ssh_hosts=("IP" "IP1".......) user=root remote_cmd="df -h" ...

  7. ssh批量登录并执行命令(python实现)

    局域网内有一百多台电脑,全部都是linux操作系统,所有电脑配置相同,系统完全相同(包括用户名和密码),ip地址是自动分配的.现在有个任务是在这些电脑上执行某些命令,者说进行某些操作,比如安装某些软件 ...

  8. Python实现ssh批量登录并执行命令

    局域网内有一百多台电脑,全部都是linux操作系统,所有电脑配置相同,系统完全相同(包括用户名和密码),ip地址是自动分配的.现在有个任务是在这些电脑上执行某些命令,者说进行某些操作,比如安装某些软件 ...

  9. python批量操作Linux服务器脚本,ssh密码登录(执行命令、上传、下载)(一)

     -*-          paramiko.util.log_to_file(         ssh = paramiko.SSHClient()          ssh.set_missing ...

随机推荐

  1. wxpython 文本框TextCtrl

    path_text = wx.TextCtrl(frame, pos=(5, 5), size=(350, 24))最常用的两个函数:path = path_text.GetValue() conte ...

  2. 【leetcode】1023. Camelcase Matching

    题目如下: A query word matches a given pattern if we can insert lowercaseletters to the pattern word so ...

  3. 【leetcode】883. Projection Area of 3D Shapes

    题目如下: 解题思路:分别求出所有立方体的个数,各行的最大值之和,各列的最大值之和.三者相加即为答案. 代码如下: class Solution(object): def projectionArea ...

  4. 百度小程序-swiper组件

    .swan <!-- 轮播图S --> <view class="swiper-box"> <swiper class="banner&qu ...

  5. mobx学习笔记04——mobx常用api

    1 可观察的数据(observable) observable是一种让数据的变化可以被观察的方法. 那些数据可被观察? -原始类型 String.Number.Boolean.Symbol -对象 - ...

  6. 数据流:DataOutputStream与DataInputStream的使用

    看这两个类的名字就不难猜测出它们的类关系图. DataOutputStream: 主要是一些writeXxx()操作,写出, 相当于序列化 DataInputStream: 主要是一些readXxx( ...

  7. BZOJ 2806: [Ctsc2012]Cheat(单调队列优化dp+后缀自动机)

    传送门 解题思路 肯定先要建出来广义后缀自动机.刚开始以为是个二分+贪心,写了一下结果\(20\)分.说一下正解,首先显然\(L_0\)具有单调性,是可以二分的.考虑二分后怎样判合法,对于分割序列很容 ...

  8. [信息学奥赛一本通oj1741]电子速度 题解

    对于$100 \%$的数据,$1≤n,m≤1e6 \ \ \ 0<=x_i,y_i<20170927 \ \ \ 1≤l_i,r_i≤n $ $Solution:$ 一开始没看懂题.后来大 ...

  9. iOS 获取全局唯一标示符

    这个方法用来产生一个唯一的标示符,每次调用都会不一样,所以可以用当作一些临时缓存文件的名字 NSString *identifier = [[NSProcessInfo processInfo] gl ...

  10. pytest_用例运行级别_class级

    ''' 模块级(setup_module/teardown_module)开始于模块始末, 全局的在类中不起作用 类级(setup_class/teardown_class)只在类中前后运行一次(在 ...