java程序访问一个连接_java程序连接Liunx服务器并且执行命令

importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.util.ArrayList;importcom.jcraft.jsch.Channel;importcom.jcraft.jsch.ChannelExec;importcom.jcraft.jsch.JSch;importcom.jcraft.jsch.JSchException;importcom.jcraft.jsch.Session;importcom.jcraft.jsch.UserInfo;/***

* @desc SSHConnectionTest.java

*

*@authorxianlei

* @date 2018年3月29日下午5:53:24*/

public classSSHConnectionTest {//远程主机的ip地址

privateString ip;//远程主机登录用户名

privateString username;//远程主机的登录密码

privateString password;//设置ssh连接的远程端口

public static final int DEFAULT_SSH_PORT = 22;//保存输出内容的容器

private ArrayListstdout;class MyUserInfo implementsUserInfo {

@OverridepublicString getPassphrase() {//TODO Auto-generated method stub

System.out.println("MyUserInfo.getPassphrase()");return null;

}

@OverridepublicString getPassword() {//TODO Auto-generated method stub

System.out.println("MyUserInfo.getPassword()");return null;

}

@Overridepublic booleanpromptPassphrase(String arg0) {//TODO Auto-generated method stub

System.out.println("MyUserInfo.promptPassphrase()");

System.out.println(arg0);return false;

}

@Overridepublic booleanpromptPassword(String arg0) {//TODO Auto-generated method stub

System.out.println("MyUserInfo.promptPassword()");

System.out.println(arg0);return false;

}

@Overridepublic booleanpromptYesNo(String arg0) {//TODO Auto-generated method stub'

System.out.println("MyUserInfo.promptYesNo()");

System.out.println(arg0);if (arg0.contains("The authenticity of host")) {return true;

}return true;

}

@Overridepublic voidshowMessage(String arg0) {//TODO Auto-generated method stub

System.out.println("MyUserInfo.showMessage()");

}

}/*** 初始化登录信息

*@paramip

*@paramusername

*@parampassword*/

public SSHConnectionTest(final String ip, final String username, finalString password) {this.ip =ip;this.username =username;this.password =password;

stdout= new ArrayList();

}/*** 执行shell命令

*@paramcommand

*@return

*/

public int execute(finalString command) {int returnCode = 0;

JSch jsch= newJSch();

MyUserInfo userInfo= newMyUserInfo();try{//创建session并且打开连接,因为创建session之后要主动打开连接

Session session =jsch.getSession(username, ip, DEFAULT_SSH_PORT);

session.setConfig("StrictHostKeyChecking", "no");

session.setPassword(password);

session.setUserInfo(userInfo);

session.connect();//打开通道,设置通道类型,和执行的命令

Channel channel = session.openChannel("exec");

ChannelExec channelExec=(ChannelExec)channel;

channelExec.setCommand(command);

channelExec.setInputStream(null);

BufferedReader input= new BufferedReader(newInputStreamReader

(channelExec.getInputStream()));

channelExec.connect();

System.out.println("The remote command is :" +command);//接收远程服务器执行命令的结果

String line;while ((line = input.readLine()) != null) {

stdout.add(line);

}

input.close();//得到returnCode

if(channelExec.isClosed()) {

returnCode=channelExec.getExitStatus();

}//关闭通道

channelExec.disconnect();//关闭session

session.disconnect();

}catch(JSchException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(Exception e) {

e.printStackTrace();

}returnreturnCode;

}/*** get stdout

*@return

*/

public ArrayListgetStandardOutput() {returnstdout;

}public static void main(finalString [] args) {

String password= "";

String username= "root";

String ip= "";

SSHConnectionTest shell= newSSHConnectionTest(ip, username, password);//启动redis服务命令

shell.execute("cd /usr/local/redis && ./redis-server redis.conf &");//关闭redis服务命令//shell.execute("cd /usr/local/redis && ./redis-cli shutdown");

ArrayList stdout =shell.getStandardOutput();for(String str : stdout) {

System.out.println(str);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Java 的 SSH 客户端库来连接 Linux 服务器。以下是一个简单的示例代码: ```java import com.jcraft.jsch.*; public class SSHConnection { public static void main(String[] args) { String host = "your_server_ip"; String user = "your_username"; String password = "your_password"; try { JSch jsch = new JSch(); Session session = jsch.getSession(user, host, 22); session.setPassword(password); session.setConfig("StrictHostKeyChecking", "no"); // 忽略主机密钥检查 session.connect(); // 执行命令 ChannelExec channel = (ChannelExec) session.openChannel("exec"); channel.setCommand("ls -l"); channel.connect(); System.out.println("Command Output:"); System.out.println(getOutput(channel)); // 关闭连接 channel.disconnect(); session.disconnect(); } catch (JSchException e) { e.printStackTrace(); } } private static String getOutput(ChannelExec channel) throws JSchException { StringBuilder output = new StringBuilder(); byte[] buffer = new byte[1024]; while (channel.getExitStatus() == -1) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } while (channel.getInputStream().available() > 0) { int len = channel.getInputStream().read(buffer); output.append(new String(buffer, 0, len)); } while (channel.getExtInputStream().available() > 0) { int len = channel.getExtInputStream().read(buffer); output.append(new String(buffer, 0, len)); } } return output.toString(); } } ``` 在上面的代码中,我们使用 JSch 库来建立 SSH 连接。首先,我们创建一个 `JSch` 实例,然后使用 `getSession` 方法创建一个连接会话。我们设置用户名、主机名和端口号(默认是 22)。接下来,我们设置密码并连接服务器。如果你不想每次连接时都检查主机密钥,可以使用 `setConfig` 方法来禁用它。 在连接成功后,我们可以使用 `ChannelExec` 类来执行命令。在上面的代码中,我们执行了一个简单的 `ls -l` 命令,并将输出打印到控制台。在执行完命令后,我们必须关闭连接。 最后,我们定义了一个 `getOutput` 方法来获取命令的输出。该方法循环读取输入流和错误流,并将它们转换为字符串。注意,我们必须等待命令执行完成后才能读取输出。 请注意,当连接到远程服务器时,为了保证安全,你应该使用密钥而不是密码进行身份验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值