SSH远程连接执行shell脚本

有时候项目会要求远程登录到主机进行脚本执行,本来以为通过跳板机连接到主机的,使用SSH会有问题,

事实证明,使用SSH可以实现直连

import java.io.InputStream;
import java.nio.charset.Charset;

import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.ConnectionInfo;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;


public class testSSH {
	
	private String ip = "****";//连接的ip
  	private String user ="***";//登录名
	private String password = "";//登录密码
	private static final int TIME_OUT = 1000 * 5 * 60;//连接超时设置
	private String charset = Charset.defaultCharset().toString();
	
	public boolean testShell(){
		 
		boolean flag = false;
		InputStream stdOut = null;
		InputStream stdErr = null;
		String outStr = "";
		String outErr = "";
		String shell = "***";//需要执行shell命令
		
		 try {
	            System.out.println(ip);
	            Connection con = new Connection(ip);
	            System.out.println("连接打开");
	            ConnectionInfo info = con.connect();
	            boolean result = con.authenticateWithPassword(user, password);
	            System.out.println("登陆成功");
	            Session session = con.openSession();
	            System.out.println("打开会话");
	            session.execCommand(shell);
	            System.out.println("成功");
	            
	            stdOut = new StreamGobbler(session.getStdout());//获取脚本执行的返回值
                    outStr = processStream(stdOut, charset);//
                
                    stdErr = new StreamGobbler(session.getStderr());//处理返回信息
                    outErr = processStream(stdErr, charset);
                
                    session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);
                
                System.out.println("outStr=" + outStr);
                System.out.println("outErr=" + outErr);
	            flag = true;
	        } catch (Exception ex) {
	            System.out.println(ex.getLocalizedMessage());
	        }
	      return flag;
	}
	  private String processStream(InputStream in, String charset) throws Exception {
	        byte[] buf = new byte[1024];
	        StringBuilder sb = new StringBuilder();
	        while (in.read(buf) != -1) {
	            sb.append(new String(buf, charset));
	        }
	        return sb.toString();
	    }
	public static void main(String args[]){
		testSSH test = new testSSH();
		test.testShell();
	}

}

### 回答1: 可以使用SSH连接到远程主机并执行shell脚本。命令格式如下: ``` ssh user@remote_host "command" ``` 其中,user是远程主机的用户名,remote_host是远程主机的地址,command是要在远程主机上执行的命令。 例如,执行远程主机上的脚本test.sh,命令如下: ``` ssh user@remote_host "bash /path/to/test.sh" ``` 如果你要执行脚本文件在本地,还可以使用 ssh 连接远程服务器并将文件传输到远程服务器,然后再执行脚本。 ``` scp test.sh user@remote_host:/path/to/ ssh user@remote_host "bash /path/to/test.sh" ``` 需要注意的是,远程主机上的命令执行完成后,SSH会立即断开连接。如果需要保持连接,可以使用-t参数,例如: ``` ssh -t user@remote_host "bash /path/to/test.sh" ``` ### 回答2: SSH是一种用于远程登录和执行命令的网络协议。远程执行Shell脚本通过SSH连接到远程服务器并在服务器上执行Shell脚本。 要远程执行Shell脚本,首先需要安装和配置SSH服务器和客户端。然后,在本地计算机上使用SSH客户端连接到远程服务器。 连接到远程服务器后,可以使用SSH命令执行Shell脚本。要执行Shell脚本,可以使用以下命令: ssh username@remote_server 'bash -s' < script.sh 在上述命令中,`username`是远程服务器的用户名,`remote_server`是远程服务器的地址,`script.sh`是要执行Shell脚本的文件名。 通过这个命令,SSH会将Shell脚本作为标准输入传递给远程服务器,并在远程服务器上使用Bash解释器执行脚本执行脚本后,结果将返回到本地计算机。 执行远程Shell脚本需要使用正确的用户名和密码来连接到远程服务器,确保远程服务器已经配置了正确的权限和路径。 总而言之,通过SSH远程连接到服务器,并使用SSH命令执行Shell脚本,可以在远程服务器上执行Shell脚本并获取结果。这是一种安全且方便的方法,适用于远程管理和自动化任务。 ### 回答3: SSH(Secure Socket Shell)是一种安全协议,用于远程登录和执行操作。要远程执行shell脚本,首先需要拥有远程主机的登录凭证和相应的权限。 使用SSH远程执行shell脚本可以通过以下步骤完成: 1. 在本地终端上打开SSH客户端工具(如OpenSSH),并输入登录远程主机的命令,形如:`ssh username@remote_host`。其中,`username`是远程主机的用户名,`remote_host`是远程主机的IP地址或域名。 2. 输入远程主机的登录密码,如果远程主机开启了公钥认证,也可以通过私钥进行身份验证。 3. 登录成功后,可以在终端上执行shell命令或运行shell脚本。要执行shell脚本,可以输入命令:`./script.sh`,其中`script.sh`是待执行脚本文件名。 4. 执行shell脚本时可能需要输入一些参数或者确认操作,根据脚本的需要进行相应的输入。 5. 执行完成后,观察终端上的输出,可以查看脚本执行的结果。如果需要保存脚本执行结果,可以将输出重定向到一个文件中,命令形如:`./script.sh > output.txt`。 请注意,执行shell脚本需要确保远程主机上已经安装了所需的脚本执行环境和依赖,否则可能会出现脚本执行失败或无法正常运行的情况。 总之,通过SSH远程执行shell脚本可以方便地在远程主机上执行自定义的操作,从而实现远程管理和自动化部署等任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值