linux遠程執行命令
A. linux中ssh如何遠程執行一條命令,而且不登錄遠程伺服器
一 SSH命令使用技巧
- 遠程登錄
- 遠程執行
ssh [email protected] 'command ...'
- 遠程復制
scp [email protected]:/remote/path /local/path
scp /local/path [email protected]:/remote/path
- X forward
ssh -X [email protected]
xcommand ...
- Tunnel / Portforward
ssh -L 1234:remote.machine:4321 [email protected]
ssh -R 1234:local.machine:4321 [email protected]
ssh -L 1234:other.machine:4321 [email protected]
二, 實作
1) 禁止 root 登錄
# vi /etc/ssh/sshd_config
PermitRootLogin no
2) 廢除密碼登錄, 強迫使用 RSA 驗證(假設 ssh 賬戶為 user1 )
# vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
# service sshd restart
# su - user1
$ mkdir ~/.ssh 2>/dev/null
$ chmod 700 ~/.ssh
$ touch ~/.ssh/authorized_keys
$ chmod 644 ~/.ssh/authorized_keys
登入端:
$ ssh-keygen -t rsa
(按三下 enter 完成﹔不需設密碼,除非您會用 ssh-agent 。)
$ scp ~/.ssh/id_rsa.pub [email protected]:id_rsa.pub
(若是 windows client, 可用 puttygen.exe 產生 public key,
然後復制到 server 端後修改之, 使其內容成為單一一行.)
回到 server 端:
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
$ rm ~/id_rsa.pub
$ exit
3) 限制 su / sudo 名單:
# vi /etc/pam.d/su
auth required /lib/security/$ISA/pam_wheel.so use_uid
# visudo
%wheel ALL=(ALL) ALL
# gpasswd -a user1 wheel
4) 限制 ssh 使用者名單
# vi /etc/pam.d/sshd
auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users ōnerr=fail
# echo user1 >> /etc/ssh_users
B. 本地shell腳本中ssh到遠程伺服器並執行命令
在實際運用中在當前伺服器執行命令後,需要在另一台伺服器繼續執行某些命令,和耐衫分開去到另一台伺服器執行也是比較麻煩的,因此整理下集中執行的方式喚腔
1、首先配置ssh免密操作
Linux 下實現SSH互信: https://www.jianshu.com/p/2456d98aa607
2、簡單命令
ssh [email protected] "cd /var/lib; ls; cd "
2.1 使用時注意,雙引號必須有。若沒加雙引號,第二條及之後的命令會在本地執行
2.2 分號是將兩條語句間隔開
2.3 單雙引的區別:單引號不會解析值,是什麼就傳什麼;雙引號會解析值,將解析結果傳過去
3、多條命令
ssh [email protected]<< reallssh
cd /var/lib/test
tar -zxvf api.com.tar.gz
......
exit
reallssh
3.1 命令寫在 << reallssh(開始畝悶) 至 reallssh(結束) 之間
3.2 reallssh可自己定義為其他形式
3.3 在結束前加上exit退出遠程
4、可能遇到的問題
問題:遠程登錄主機時出現Pseudo-terminal will not be allocated because stdin is not a terminal. 錯誤
解決方案:字面意思是偽終端將無法分配,因為標准輸入不是終端。
所以需要增加-t -t參數來強制偽終端分配,即使標准輸入不是終端。
to force pseudo-tty allocation even if stdin isn』t a terminal.
參考樣例如下:
ssh -t -t [email protected] -p 22
--------------------------------------------------------------------------------
參考:https://blog.csdn.net/jinking01/article/details/84386769
C. java Linux遠程調用win執行UI
java通過winrm4j遠程連接win執行命令
在Linux /UNIX/WINDOWS系統中,一般通過遠程連接的方式在遠端執行腳本命令或者其他,是通過SSH或者Telnet。筆者之前寫伍塌過幾遍運用JAVA使用SSH或者TELNET連接操作系統執行命令的博客。但這些協議之間存在的差別的。
在LINUX、UNIX系統中一般通過SSH協議來登錄、執行命令;
而在Windows操作系統中,由於沒有自帶SSH協議,一般通過Telnet協議去登錄、執行命者賀令;但是Telnet服務默認是不開啟的。所以在大規模環境中,操作比較麻煩。另外Telnet協議存在安全問題。
如腔嫌圓果不需要執行命令,而是通過遠程桌面的形式來操作windows,可以使用RDP協議,java有一個開源的項目properJavaRDP,可以在web頁面或者GUI形式提供實現方案。
D. linux 遠程桌面命令
Linux的遠程桌面應該分兩個部分,首先是Linux客戶機連Linux伺服器,接著是windows客戶機連Linux伺服器,還有現在用平板電腦連遠程桌面。Linux客戶機連Windows伺服器其實沒啥可說的,rdesktop和termianl
server比起windows自帶的「遠程桌面連接」。
命令:
1.
nfs,telnet等均可登錄,即將遠程的那個配置成主機伺服器,這邊作為客戶機登錄.
比如:telnet
telnet
192.168.1.123
說明:192.168.1.123就是遠程的Ip地址
2.
現在設想登錄到遠程主機rhostname上,運行gimp
程序,並把它的顯示輸出到本機的屏幕上,那麼需要依次執行以下操作:
1.啟動X
伺服器
#
xhost
+rhostname
(允許遠程rhostname
機使用本機的X
Server)
2.telnet
(或ssh)登錄遠程主機
#
telnet
rhostname
3.設置DISPLAY
環境變數
指定了一個顯示設備,所有的圖形程序都將顯示到這個設備。
DISPLAY
的格式為:hostname:displaynumber.screennumber。
hostname是本機主機名,或者是它的I
P
地址。一般d
i
s
p
l
a
y
n
u
m
b
e
r
、screennumber
都是0。
#
echo
$SHELL
如果返回的是
/bin/ksh,那麼可以用:#
export
DISPLAY=
本機的IP
地址:0.0
如果返回的是
/bin/csh,那麼可以用:#
setenv
DISPLAY
本機的IP地址:0.0
如果返回的是
/bin/bash,那麼可以用:#
DISPLAY=
本機的IP
地址:0.0
#
export
DISPLAY
4.啟動gimp
程序
#
gimp
E. linux中遠程訪問的命令
可以通過ssh命令連接。
命令使用語法:
1,指定用戶:
ssh-lroot192.168.0.11或則
2,如果修改過ssh登錄埠的可以:
ssh-p12333192.168.0.11
ssh-lroot-p12333192.168.0.11
連接步驟:
1,打開終端。
2,一般情況下使用ssh +目標地址即可,測試連接本機:
ssh127.0.0.1
3,首次登陸會提示你是否確認連接
輸入yes,連接成功。
4,連接其他賬戶或者計算機需要輸入密碼才能連接。
F. linux 遠程連接命令
Linux最廣泛的遠程連接命令就是ssh。
如果ssh沒有安裝就安裝 RH系列就yum install openssh
ubuntu系列就是apt-get install openssh
安裝完畢後,其他的電腦可以遠程訪問本機,
本機也可以訪問遠程電腦。連接遠程電腦命令:ssh -l 用戶名 主機名