java如何執行另一台伺服器上的命令
A. java 如何通過一台機器執行另外一台機器上的bat命令
socket編程。
建立一個ServerSocket 和一個 Socket。
因為你要執行另一台機器上面的東西,就必須要建立連接。(當然了,你可以使用ftp連接的)
之後就讀取bat裡面的內容,用位元組流返回給第一台機器。
之後第一台機器,把位元組流轉換為String,之後再調用System類中的某個方法即可(參數就是你轉換後的String)
B. java 實現文件上傳到另一台伺服器,該怎麼解決
在Java中實現文件上傳至另一台伺服器,可以按照以下步驟進行操作。首先,我們需要編寫代碼來添加本地文件,確保路徑正確使用雙斜杠(\)以避免解析錯誤。接著,我們需要調用上傳函數開始實際的文件傳輸過程。下面是具體的實現步驟:
1. 使用File類創建一個File對象,指定要上傳的本地文件路徑。確保路徑格式正確,使用雙斜杠代替反斜杠。
2. 編寫一個名為AddFile的方法,接收File對象作為參數,並將文件信息存儲起來或發送到伺服器。在該方法中,你可以將文件路徑作為參數傳遞,並使用文件流讀取文件內容。
3. 創建一個名為PostFirst的方法,用於啟動文件上傳過程。此方法可以使用HTTP POST請求將文件內容發送到目標伺服器。你可以使用Java中的HttpURLConnection或第三方庫如Apache HttpClient來實現。
4. 在PostFirst方法中,首先需要建立與目標伺服器的連接。設置請求方法為POST,並添加必要的請求頭,如Content-Type。接下來,使用輸出流將文件內容寫入請求體。
5. 發送請求後,接收伺服器的響應。檢查響應狀態碼,以確保文件上傳成功。如果需要,可以從響應中獲取上傳文件的路徑或任何其他相關信息。
6. 最後,不要忘記關閉所有打開的流和連接,以釋放資源。
通過遵循這些步驟,你可以實現Java中從本地文件系統上傳文件到另一台伺服器的功能。在實際應用中,你可能還需要處理各種錯誤情況,如網路問題或文件大小限制等。確保代碼具備良好的錯誤處理機制,以便在出現問題時能夠及時發現並解決。
在開發過程中,你還可以考慮添加進度條顯示上傳進度,或者實現斷點續傳功能,以提高用戶體驗和提高上傳成功率。
此外,為了確保代碼的健壯性和安全性,建議在上傳文件之前進行必要的驗證,例如檢查文件類型和大小限制。這有助於防止惡意文件上傳,保護伺服器免受潛在威脅。
C. java如何執行遠程伺服器上的.sh文件
你可以使用JSch
JSch全稱是「Java Secure Channel」
是SSH2的一個純Java實現。它允許你連接到一個sshd 伺服器,使用埠轉發,X11轉發,文件傳輸等等。同時也是支持執行命令;
以下是大概運行的代碼,只是提供大致思路,可以去查官方API和demo
importcom.jcraft.jsch.ChannelExec;
importcom.jcraft.jsch.ChannelSftp;
importcom.jcraft.jsch.ChannelSftp.LsEntry;
importcom.jcraft.jsch.JSch;
importcom.jcraft.jsch.JSchException;
importcom.jcraft.jsch.Session;
importcom.jcraft.jsch.SftpATTRS;
importcom.jcraft.jsch.SftpException;
.......
try{
Sessionsession=new指培顫JSch().getSession(user,ip,port);
session.setPassword(pwd);
session.setConfig("StrictHostKeyChecking","no");
session.setConfig("userauth.gssapi-with-mic","no");
session.connect();
ChannelExecexec=(ChannelExec)session.openChannel("exec");
exec.setCommand("ifconfig");//這里是你要執唯敗行的命令,部分命令中敏不支持,具體自己執行下
ByteArrayOutputStreambao=newByteArrayOutputStream();
exec.setOutputStream(bao);
ByteArrayOutputStreambaerr=newByteArrayOutputStream();
exec.setErrStream(baerr);
exec.connect();
while(!exec.isEOF())
;
Stringerrmsg=newString(baerr.toByteArray(),"utf-8");
if(StringUtils.notNull(errmsg)){
thrownewRuntimeException(errmsg);
}else{
System.out.println(newString(bao.toByteArray(),"utf-8"));
}
}catch(Exceptione){
e.printStackTrace();
}finally{
//關閉session等操作
}
D. java實現ssh遠程訪問
java怎麼使用sshbase和遠程機器進行交互在本地使用ssh$RemoteNodecmd可以在執行遠程機器上的命令,例如sshuser@nodels/local會執行遠程機器上的ls/local命令,如果想在遠程機器上連續執行多條命令,可以用單引號或者雙引號將這些命令括起來,
例如:sshuser@node"cd/local;pwd;ls"
如果想在本地啟動遠程機器上的命令後就返回來,可以這樣sshuser@node"/local/x.sh1/dev/null21"
注意如果沒有「」,例如sshuser@nodecd/local;ls則ls只會執行cd/local命令,ls命令在本地執行,磨鬧碧加了雙引號或者單引號,則被括起來的命令被當做ssh命令的一個參數,所以會在遠程連續執行。
單引號和雙引號在瞎舉ssh命令中的區別:
以一個例子來說明問題,
假設本地機器上配置了JAVA環境變數,在本地執行echo$JAVA_HOME=/opt/jdk
假若我想查看遠程彎悶機器上的JAVA環境變數,則只能使用單引號了,sshuser@node'echo$JAVA',則是''中的$JAVA不會被shell解析,而是當做一個字元串,此時參數echo$JAVA傳遞給了ssh;
如果我們使用sshuser@node」echo$JAVA",則shell首先會解析$JAVA,得到它的值,則該命令就變成了sshuser@node'echo/opt/jdk'了
如何用Java實現SSH遠程連接?這還要思路。。。
表單提交到後台,觸發方法,
然後調滾磨和型jsch的方法,獲取返回信息大棚斗。
然後return到頁面。
搞定!
如何使用java通過ssh的方式登錄遠程伺服器執行命令並返回結果
讓用戶輸入要執行的命令,接收端會賀氏認為它是密碼,應禪李散該會提示密碼錯誤擾卜之類的吧?獲取這個信息,提醒用戶輸入密碼。
如何用java遠程登錄windowsJava使用SSH遠程訪問Windows並執行命令
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importch.ethz.ssh2.Connection;
importch.ethz.ssh2.Session;
importch.ethz.ssh2.StreamGobbler;
publicclassSSHWindows{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Stringhostname="192.168.30.10";
Stringusername="administrator";
Stringpassword="Talent123";
try{
/緩裂桐/建立連接
Connectionconn=newConnection(hostname);
//System.out.println("setupconnections");
conn.connect();
//利用用戶名和密碼進行授權
booleanisAuthenticated=conn.authenticateWithPassword(username,password);
if(isAuthenticated==false)
{
//System.out.println("--------");
thrownewIOException("Authoricationfailed");
}
//打開會話
Sessionsess=conn.openSession();
//System.out.println("cmd----");
//執行命令
sess.execCommand("rubyC:\WhatWeb-master\擾坦whatweb--output-xml");
//System.out.println("Theexecutecommandoutputis:"源戚);
InputStreamstdout=newStreamGobbler(sess.getStdout());
BufferedReaderbr=newBufferedReader(newInputStreamReader(stdout));
while(true)
{
Stringline=br.readLine();
if(line==null)break;
System.out.println(line);
}
//System.out.println("Exitcode"+sess.getExitStatus());
sess.close();
conn.close();
//System.out.println("Connectionclosed");
}catch(IOExceptione)
{
System.out.println("cannotaccesstheremotemachine");
}
}
}