日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java channelexec_java-使用SSH exec通道调用Shell脚本,但忽略对其他Shell脚本的调用

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java channelexec_java-使用SSH exec通道调用Shell脚本,但忽略对其他Shell脚本的调用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我正在使用此處提供的有用示例,使用JSch exec在遠程服務器上執行Shell腳本.我可以看到腳本返回的回顯,并且結尾處的退出狀態為0-乍一看,一切看起來都很不錯.

但是,問題在于腳本本身會調出其他腳本,而這些腳本似乎被完全忽略,只是被跳過了.

該腳本直接調用其他腳本.即腳本的第一行類似于:

script_two.sh

任何人都可以建議以任何方式克服這一問題嗎?我確實開始研究“ shell”通道而不是“ exec”通道,但是在我的情況下這可能很棘手,因為在允許用戶訪問系統之前,服務器會提供一個表格來填寫(名稱,編號,為什么您已登錄,等等)-我尚無法以編程方式填寫并提交此表格,因此,如果可能的話,我想堅持使用exec.

我是這一切的新手,所以任何幫助/建議都將受到歡迎!

下面的代碼段.就像我說的那樣,這似乎可行,但是以“ scriptFileName”表示的sh腳本會在代碼中調用其他sh腳本,并且這些腳本不會執行.

預先感謝您的幫助,J

JSch jsch = new JSch();

JSch.setConfig(FileTransferConstants.STRICT_HOST_KEY_CHECKING, "no");

Session session = jsch.getSession(username, hostIPAddress, port);

session.setPassword(password);

session.connect();

//create the execution channel over the session

ChannelExec channelExec = (ChannelExec)session.openChannel("exec");

channelExec.setCommand(scriptFileName);

channelExec.connect();

解決方法:

我認為腳本看起來像:

script_one.sh

script_two.sh

即該腳本依賴. (當前路徑)位于PATH環境變量中,這不是默認值.

因此,為了使腳本正常工作,請使用.必須在某些啟動腳本中添加到PATH中.這種添加很有可能僅針對交互式會話發生(可能是無意間錯誤地).可能是因為添加是在僅針對交互式會話執行(來源)的啟動腳本中完成的.

JSch中的“ exec”通道(正確地)沒有為會話分配偽終端(PTY).因此,與使用SSH客戶端登錄時相比,(可能)獲得了(可能)不同的啟動腳本集.基于TERM環境變量的存在/不存在,和/或在腳本中采用不同的分支.因此,環境可能不同于您與SSH客戶端一起使用的交互式會話.

解決方案為(按優先順序排列):

>更正腳本,使其不依賴具有的非默認設置.在PATH中.用顯式路徑調用子腳本:

./script_one.sh

./script_two.sh

>更正啟動腳本以添加.無條件地連接到PATH(即使是非交互式會話).

>(不推薦)使用.setPty方法為“ exec”通道強制偽終端分配:

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

((ChannelExec)channel).setPty(true);

標簽:jsch,shell,ssh,java

來源: https://codeday.me/bug/20191118/2028468.html

總結

以上是生活随笔為你收集整理的java channelexec_java-使用SSH exec通道调用Shell脚本,但忽略对其他Shell脚本的调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。