How to use SSH to run a local shell script on a remote machine?

前端 未结 17 1557
南笙
南笙 2020-11-21 22:33

I have to run a local shell script (windows/Linux) on a remote machine.

I have SSH configured on both machine A and B. My script is on machine A which will run some o

17条回答
  •  情深已故
    2020-11-21 23:03

    The answer here (https://stackoverflow.com/a/2732991/4752883) works great if you're trying to run a script on a remote linux machine using plink or ssh. It will work if the script has multiple lines on linux.

    **However, if you are trying to run a batch script located on a local linux/windows machine and your remote machine is Windows, and it consists of multiple lines using **

    plink root@MachineB -m local_script.bat

    wont work.

    Only the first line of the script will be executed. This is probably a limitation of plink.

    Solution 1:

    To run a multiline batch script (especially if it's relatively simple, consisting of a few lines):

    If your original batch script is as follows

    cd C:\Users\ipython_user\Desktop 
    python filename.py
    

    you can combine the lines together using the "&&" separator as follows in your local_script.bat file: https://stackoverflow.com/a/8055390/4752883:

    cd C:\Users\ipython_user\Desktop && python filename.py
    

    After this change, you can then run the script as pointed out here by @JasonR.Coombs: https://stackoverflow.com/a/2732991/4752883 with:

    `plink root@MachineB -m local_script.bat`
    

    Solution 2:

    If your batch script is relatively complicated, it may be better to use a batch script which encapsulates the plink command as well as follows as pointed out here by @Martin https://stackoverflow.com/a/32196999/4752883:

    rem Open tunnel in the background
    start plink.exe -ssh [username]@[hostname] -L 3307:127.0.0.1:3306 -i "[SSH
    key]" -N
    
    rem Wait a second to let Plink establish the tunnel 
    timeout /t 1
    
    rem Run the task using the tunnel
    "C:\Program Files\R\R-3.2.1\bin\x64\R.exe" CMD BATCH qidash.R
    
    rem Kill the tunnel
    taskkill /im plink.exe
    

提交回复
热议问题