දුරස්ථ යන්ත්‍රයක ෂෙල් ස්ක්‍රිප්ට් ධාවනය කිරීමට SSH භාවිතා කරන්නේ කෙසේද?


1239

මට දුරස්ථ යන්ත්‍රයක ෂෙල් ස්ක්‍රිප්ට් (වින්ඩෝස් / ලිනක්ස්) ධාවනය කළ යුතුය.

මා විසින් SSH වින්‍යාස කර ඇත්තේ A සහ ​​B යන යන්ත්‍ර දෙකෙහිම ය.

දේශීය හා දුරස්ථ පරිගණක වින්ඩෝස් හෝ යුනික්ස් පදනම් කරගත් පද්ධතියක් විය හැකිය.

Plink / ssh භාවිතයෙන් මෙය ක්‍රියාත්මක කිරීමට ක්‍රමයක් තිබේද?


6
එම ප්‍රශ්නයම දැනටමත් සර්වර්ෆෝල්ට් හි ඇත: serverfault.com/questions/215756/… එබැවින් මෙම ප්‍රශ්නය සංක්‍රමණය කිරීමේ කිසිදු තේරුමක් නැත.
sleske

9
සර්වර් ෆෝල්ට් පිළිබඳ ප්‍රශ්නයට පිළිතුරු තරම් ප්‍රමාණයක් නොමැත. සමහර විට මෙම ප්‍රශ්නය එම ප්‍රශ්නය වෙනුවට ආදේශ කළ යුතුය.
බිග් මැක්ලාර්ජ්හියුජ්

5
මම මෙම පිළිතුරට පෞද්ගලිකව කැමතියි: unix.stackexchange.com/questions/87405/…
mikevoermans

27
මෘදුකාංග සංවර්ධනය සඳහා ssh ප්‍රධාන මෙවලමක් වන බැවින් එය පැහැදිලිවම මාතෘකාව මත විය යුතුය.
static_rtti

4
SO හි කෝපි සහ ssh ප්‍රශ්න එකම මාතෘකාවෙන් බැහැර නොවේ. නැවත විවෘත කිරීම සඳහා ඡන්දය ප්‍රකාශ කරන ලදි.
වින්සන්ට් කැන්ටින්

Answers:


1204

යන්ත්රය ඒ වින්ඩෝස් කොටුව නම්, ඔබ Plink (කොටසක් භාවිතා කළ හැකිය පුටි මෙම -m පරාමිතිය සමඟ), සහ එය දුරස්ථ සේවාදායකය මත දේශීය තිර රචනය ක්රියාත්මක වනු ඇත.

plink root@MachineB -m local_script.sh

යන්ත්‍ර A යනු යුනික්ස් මත පදනම් වූ පද්ධතියක් නම්, ඔබට මෙය භාවිතා කළ හැකිය:

ssh root@MachineB 'bash -s' < local_script.sh

එය ක්‍රියාත්මක කිරීම සඳහා ස්ක්‍රිප්ට් දුරස්ථ සේවාදායකයට පිටපත් කිරීමට ඔබට අවශ්‍ය නොවිය යුතුය.


11
-sවිකල්පය භාවිතා කිරීමෙන් වාසියක් තිබේද? මෙම මෑන් පිටුව-s භාවිතා කිරීමට හෝ නොකිරීමට සැකසුම් විකල්පයන් සිදු කළ විට එය සම්මත ආදානය සැකසෙනු ඇතැයි විශ්වාස කිරීමට මා යොමු කරයි .
aeroNotAuto

79
අවශ්‍ය ස්ක්‍රිප්ටයක් සඳහා sudo, ධාවනය කරන්න ssh root@MachineB 'echo "rootpass" | sudo -Sv && bash -s' < local_script.sh.
bradley.ayers

6
sk bradley.ayers ඉතිහාසය මඟ හැරීම සඳහා 'අවකාශයක්' සමඟ විධානය ආරම්භ කිරීමට මතක තබා ගන්න (PS ඔබට HISTCONTROL=ignoreboth or ignorespaceඑය ක්‍රියාත්මක කළ යුතුය)
derenio

8
root bradley.ayers ඔබ දැනටමත් root ලෙස ලොග් වී සිටින්නේ නම් ඔබට sudo අවශ්‍ය වන්නේ කුමන අවස්ථා වලදීද?
බ්‍රයන් ෂ්ලෙන්කර්

22
G ඇගොස්ටිනෝ, ඔබට මේ වගේ පරාමිතීන් එක් කළ හැකිය: ssh root@MachineB ARG1="arg1" ARG2="arg2" 'bash -s' < local_script.sh ණය සම්පුර්ණයෙන්ම @chubbsondubs හි පිළිතුර වෙත යන්න.
යෙව්ස් වැන් බෘක්හෝවන්

640

මෙය පැරණි ප්‍රශ්නයක් වන අතර ජේසන්ගේ පිළිතුර හොඳින් ක්‍රියාත්මක වේ, නමුත් මම මෙය එක් කිරීමට කැමතියි:

ssh user@host <<'ENDSSH'
#commands to run on remote host
ENDSSH

පරිශීලක ආදානය අවශ්‍ය වන su සහ විධාන සමඟද මෙය භාවිතා කළ හැකිය. ( 'පැන ගිය පරම්පරාව සටහන් කරන්න)

සංස්කරණය කරන්න: මෙම පිළිතුර මගින් තදබදය වැඩි වන හෙයින්, මෙම අපූරු පරම්පරාගත භාවිතයට තවත් තොරතුරු එකතු කරමි:

ඔබට මෙම වාක්‍ය ඛණ්ඩය සමඟ කූඩු විධාන කළ හැකි අතර, කැදැල්ල වැඩ කරන බව පෙනෙන එකම ක්‍රමය එයයි.

ssh user@host <<'ENDSSH'
#commands to run on remote host
ssh user@host2 <<'END2'
# Another bunch of commands on another host
wall <<'ENDWALL'
Error: Out of cheese
ENDWALL
ftp ftp.secureftp-test.com <<'ENDFTP'
test
test
ls
ENDFTP
END2
ENDSSH

ඔබට ඇත්ත වශයෙන්ම ටෙල්නෙට්, එෆ්ටීපී වැනි සමහර සේවාවන් සමඟ සංවාදයක් පැවැත්විය හැකිය. නමුත් හෙරඩොක් විසින් ස්ටැඩින් පා text යක් ලෙස යවන බව මතක තබා ගන්න, එය රේඛා අතර ප්‍රතිචාරයක් බලාපොරොත්තුවෙන් නැත

සංස්කරණය කරන්න: ඔබ භාවිතා කරන්නේ නම් ඔබට ටැබ් සමඟ කෘමීන් ඇතුල් කළ හැකි බව මම දැන ගතිමි <<-END!

ssh user@host <<-'ENDSSH'
    #commands to run on remote host
    ssh user@host2 <<-'END2'
        # Another bunch of commands on another host
        wall <<-'ENDWALL'
            Error: Out of cheese
        ENDWALL
        ftp ftp.secureftp-test.com <<-'ENDFTP'
            test
            test
            ls
        ENDFTP
    END2
ENDSSH

(මම හිතන්නේ මෙය ක්‍රියාත්මක විය යුතුයි)

Http://tldp.org/LDP/abs/html/here-docs.html ද බලන්න


4

51
ටර්මිනේටරය ( <<'ENDSSH') වටා තනි උපුටා දැක්වීම් සමඟ , නූල් පුළුල් නොවන අතර විචල්‍යයන් ඇගයීමට ලක් නොවන බව සලකන්න. ඔබට පුළුල් කිරීම අවශ්‍ය නම් <<ENDSSHහෝ භාවිතා කළ හැකිය <<"ENDSSH".
mackle

3
Expectඔබට FTP වැනි අන්තර්ක්‍රියාකාරී විධාන ස්වයංක්‍රීය කිරීමට අවශ්‍ය විට භාවිතා කළ හැකිය.
වැඩසටහන්

6
මට Pseudo-terminal will not be allocated because stdin is not a terminal.පණිවිඩයක් තිබූ බව සලකන්න . -t -tඑය වළක්වා ගැනීම සඳහා යමෙකුට පරාමිති සමඟ ssh භාවිතා කළ යුතුය. මෙම නූල්
Buzut

8
ඔබ << - 'END' සින්ටැක්ස් භාවිතා කිරීමට උත්සාහ කරන්නේ නම්, ඔබේ පාරම්පරික අවසානය පරිසීමකය අවකාශය නොව TAB භාවිතා කර ඇති බවට වග බලා ගන්න. Stackexchange වෙතින් පිටපත් කිරීම / ඇලවීම ඔබට ඉඩ ලබා දෙන බව සලකන්න. ඒවා ටැබ් වලට වෙනස් කරන්න, ඉන්ඩෙන්ට් ලක්ෂණය ක්‍රියාත්මක විය යුතුය.
fbicknel

250

ඔබට ගමනාන්ත ධාරකයෙන් ඒවා ලබා ගැනීමට අවශ්‍ය නම් විචල්‍යයන්ගෙන් ගැලවීමට අමතක නොකරන්න.

මෙය අතීතයේ දී මා අල්ලාගෙන ඇත.

උදාහරණයක් වශයෙන්:

user@host> ssh user2@host2 "echo \$HOME"

මුද්‍රණය කරයි / ගෙදර / පරිශීලක 2

අතර

user@host> ssh user2@host2 "echo $HOME"

නිවස / පරිශීලකයා මුද්‍රණය කරයි

තවත් උදාහරණයක්:

user@host> ssh user2@host2 "echo hello world | awk '{print \$1}'"

"හෙලෝ" නිවැරදිව මුද්‍රණය කරයි.


2
කෙසේ වෙතත් පහත සඳහන් කරුණු පිළිබඳව සැලකිලිමත් වන්න: ssh user2@host 'bash -s' echo $HOME /home/user2 exit
errant.info

1
සැසිය තුළ forක්‍රියාත්මක වන ලූප වලදී එය එකතු කිරීම sshසඳහා ලූප් විචල්‍යය ගැලවිය යුතු නොවේ.
ඇලෙක්සි ඩැරින්

1
බොහෝ අවස්ථාවන්හීදී, ඔබේ අවසාන උදාහරණය නිවැරදි කිරීමට ඇති හොඳම ක්‍රමය වනුයේ ssh user2@host2 'echo hello world' | awk '{ print $1 }'අව්ක් ස්ක්‍රිප්ට් දේශීයව ධාවනය කිරීමයි. දුරස්ථ විධානය මඟින් ප්‍රතිදානය පිළිබඳ අතිවිශාල ප්‍රමාණයක් නිපදවන්නේ නම්, ඔබට අවශ්‍ය වන්නේ ඒ සියල්ල නැවත දේශීය සේවාදායකයට පිටපත් කිරීමෙන් වළකින්න. අහම්බෙන්, දුරස්ථ විධානය වටා ඇති තනි උපුටා දැක්වීම් වලින් ගැලවීමේ අවශ්‍යතාවය මග හැරේ.
ත්‍රිත්ව

152

දේශීය යන්ත්‍රයෙන් දුරස්ථ ධාරකයට ENV විචල්‍යයන් යැවීම සමඟ පේළිගත දුරස්ථ විධාන ඒකාබද්ධ කිරීම සඳහා යාරෙක්ට්ගේ පිළිතුරට මෙය දිගුවකි, එවිට ඔබට දුරස්ථ පැත්තේ ඔබේ ස්ක්‍රිප්ට් පරාමිතිකරණය කළ හැකිය:

ssh user@host ARG1=$ARG1 ARG2=$ARG2 'bash -s' <<'ENDSSH'
  # commands to run on remote host
  echo $ARG1 $ARG2
ENDSSH

මේ සියල්ල එක ස්ක්‍රිප්ට් එකක තබා ගැනීමෙන් මෙය ඉතා ප්‍රයෝජනවත් බව මට පෙනී ගියේය.

මෙය ක්‍රියාත්මක වන්නේ ඇයි? ssh පහත සඳහන් වාක්‍ය ඛණ්ඩයට සහය දක්වයි:

ssh පරිශීලක @ ධාරක දුරස්ථ_ විධාන

එක පේළියක විධානයක් ක්‍රියාත්මක කිරීමට පෙර නිර්වචනය කිරීම සඳහා අපට පරිසර විචල්‍යයන් නියම කළ හැකිය:

ENV_VAR_1 = 'value1' ENV_VAR_2 = 'value2' bash -c 'echo $ ENV_VAR_1 $ ENV_VAR_2'

එය විධානයක් ක්‍රියාත්මක කිරීමට පෙර විචල්‍යයන් අර්ථ දැක්වීම පහසු කරයි. මෙම අවස්ථාවේ දී echo යනු අපගේ විධානයයි. Echo ට පෙර සෑම දෙයක්ම පරිසර විචල්‍යයන් අර්ථ දක්වයි.

එබැවින් අපි එම විශේෂාංග දෙක සහ යාරෙක්ට්ගේ පිළිතුර ඒකාබද්ධ කර ගනිමු:

ssh පරිශීලක @ ධාරක ARG1 = $ ARG1 ARG2 = $ ARG2 'bash -s' << 'ENDSSH' ...

මෙම අවස්ථාවේදී අපි ARG1 සහ ARG2 දේශීය අගයන්ට සකසමු. පරිශීලක @ ධාරකයෙන් පසු සියල්ල දුරස්ථ_කමාන්ඩ් ලෙස යවයි. දුරස්ථ යන්ත්රය ARG1 සහ ARG2 විධානය ක්රියාත්මක කරන විට, දේශීය අගයන් සකසා ඇති අතර, දුරස්ථ සේවාදායකයේ පරිසර විචල්යයන් නිර්වචනය කරන දේශීය විධාන රේඛා ඇගයීමට ස්තූතිවන්ත වන අතර, එම විචල්යයන් භාවිතා කරමින් bash -s විධානය ක්රියාත්මක කරයි. වොයිලා.


1
-A වැනි තර්ක සම්මත කිරීමට ඔබට අවශ්‍ය නම් ඔබට භාවිතා කළ හැකි බව සලකන්න. උදා: 'ssh user @ host - -a foo bar' bash -s '<script.sh'. නැවත හරවා යැවීමෙන් පසුවද ආර්ග්ස් වෙත යා හැකිය. උදා: 'ssh user @ host' bash -s '<script.sh - -a foo bar'.
gaoithe

8
කිසියම් env var අගයන්හි අවකාශයන් තිබේ නම්, භාවිතා කරන්න:ssh user@host "ARG1=\"$ARG1\" ARG2=\"$ARG2\"" 'bash -s' <<'ENDSSH'...
TalkLittle

මා වෙනත් -sවිවරණයක ලියා ඇති ආකාරයටම, භාවිතා කිරීමේ හරය වන්නේ ස්ටැඩින් හරහා උපුටා ගත් ස්ක්‍රිප්ට් සඳහා තර්ක යෙදීමයි. මම කිව්වේ, ඔබ එය භාවිතා නොකරන්නේ නම් ඔබට එය මඟ හැරිය හැක. ඔබ එය භාවිතා කරන්නේ නම්, පරිසර විචල්‍යයන් භාවිතා කිරීමට හේතුවක් නැත:ssh user@host 'bash -s value1 value2' <<< 'echo "$@"'
JoL

108
<hostA_shell_prompt>$ ssh user@hostB "ls -la"

ඔබේ සත්කාරක පරිශීලකයාගේ පොදු යතුර පරිශීලකගේ නිවසේ ඇති බලයලත්_කයිස් ගොනුවට පිටපත් කර නොමැති නම් එය මුරපදය සඳහා ඔබෙන් විමසනු ඇත .ssh නාමාවලිය. එය මුරපද රහිත සත්‍යාපනය සඳහා ඉඩ ලබා දේ (ssh සේවාදායකයේ වින්‍යාසය මත සත්‍යාපන ක්‍රමයක් ලෙස පිළිගන්නේ නම්)


3
ඔබට ඡන්දය දුන්නා. මෙය වලංගු විසඳුමකි. නිසැකවම, යතුරු ආරක්ෂා කළ යුතුය, නමුත් ඒවා සේවාදායක පැත්ත හරහා මුරපදයක් මෙන් අවලංගු කළ හැකිය.
willasaywhat

10
මම හිතන්නේ නැහැ මේක ප්‍රශ්නයට උත්තර දෙයි කියලා. උදාහරණයෙන් දැක්වෙන්නේ දුරස්ථ විධානයක් ක්‍රියාත්මක කරන්නේ කෙසේද, නමුත් දුරස්ථ යන්ත්‍රයක දේශීය ස්ක්‍රිප්ට් එකක් ක්‍රියාත්මක කරන්නේ කෙසේද යන්න නොවේ.
ජේසන් ආර්. කුම්බ්ස්

නිශ්චිත නොවන නමුත් මෙම ක්‍රමය භාවිතා කර ඔබේ පිටපත hostA මත ධාවනය කළ නොහැකිද?
nevets1219

27

මම වඩාත් නවීන මෙහෙයුම් සඳහා ෆැබ්රික් භාවිතා කිරීමට පටන් ගතිමි . රෙදිපිළි සඳහා පයිතන් සහ තවත් පරායත්තතා කිහිපයක් අවශ්‍ය වේ, නමුත් ග්‍රාහක යන්ත්‍රය මත පමණි. සේවාදායකයට අවශ්‍ය වන්නේ ssh සේවාදායකයක් පමණි. මෙම මෙවලම SSH වෙත ලබා දී ඇති ෂෙල් ස්ක්‍රිප්ට් වලට වඩා බෙහෙවින් බලවත් බව මට පෙනී ගොස් ඇති අතර, එය සැකසීමේ කරදරයට වඩා වටිනවා (විශේෂයෙන් ඔබ පයිතන් හි වැඩසටහන් රස විඳිනවා නම්). ෆැබ්රික් විසින් බහු ධාරක (හෝ සමහර භූමිකාවන්හි ධාරක) මත ධාවනය වන ස්ක්‍රිප්ට් හසුරුවයි, අවිනිශ්චිත මෙහෙයුම් සඳහා පහසුකම් සපයයි (වින්‍යාස පිටපතකට රේඛාවක් එක් කිරීම වැනි, නමුත් එය දැනටමත් එහි නොමැති නම්), සහ වඩාත් සංකීර්ණ තර්කනයන් තැනීමට ඉඩ දෙයි (පයිතන් වැනි) භාෂාවට සැපයිය හැකිය).



11

ධාවනය කිරීමට උත්සාහ කරන්න ssh user@remote sh ./script.unx.


9
මෙය ක්‍රියාත්මක වන්නේ ස්ක්‍රිප්ට් එක දුරස්ථයේ පෙරනිමි (නිවාස) නාමාවලියෙහි තිබේ නම් පමණි. මම හිතන්නේ ප්‍රශ්නය වන්නේ දුරස්ථව දේශීයව ගබඩා කර ඇති ස්ක්‍රිප්ට් එකක් ධාවනය කරන්නේ කෙසේද යන්නයි.
metasim

1
ssh පරිශීලක නාමය @ ip "chmod + x script.sh" <br/> ssh පරිශීලක නාමය ip ip "දුරස්ථ ධාරකයේ ගොනුව වෙත යන මාර්ගය"
mani deepak

8

"දුරස්ථ" යන්ත්‍රයට අතින් ඇතුල් නොවී "දේශීය" යන්ත්‍රයකින් ස්වයංක්‍රීයව මෙය කිරීමට ඔබට අවශ්‍ය යැයි ඔබ උපකල්පනය කළහොත්, ඔබ අපේක්‍ෂා කරන TCL දිගුවක් සොයා බැලිය යුතුය, එය හරියටම මෙවැනි තත්වයක් සඳහා නිර්මාණය කර ඇත. SSH හරහා ප්‍රවේශ වීම / අන්තර් ක්‍රියා කිරීම සඳහා මම ස්ක්‍රිප්ට් එකකට සබැඳියක් ලබා දී ඇත.

https://www.nist.gov/services-resources/software/expect

http://bash.cyberciti.biz/security/expect-ssh-login-script/


5

දුරස්ථ යන්ත්‍රයක ෂෙල් ස්ක්‍රිප්ට් ධාවනය කිරීමට මම මෙය භාවිතා කරමි (/ බින් / බෑෂ් මත පරීක්ෂා කර ඇත):

ssh deploy@host . /home/deploy/path/to/script.sh

3
ssh user@hostname ".~/.bashrc;/cd path-to-file/;.filename.sh"

පරිසර ගොනුව (.bashrc / .bashprofile / .profile) ප්‍රභව කිරීමට බෙහෙවින් නිර්දේශ කෙරේ. දුරස්ථ ධාරකයේ යමක් ධාවනය කිරීමට පෙර ඉලක්කය සහ ප්‍රභව ධාරක පරිසර විචල්‍යයන් අක්‍රීය විය හැකිය.


දේශීය ස්ක්‍රිප්ටයක් දුරස්ථ ධාරකයට ගෙන යන්නේ කෙසේදැයි මෙය පැහැදිලි නොකරයි.
kirelagin

2

ඔබට මෙම විධානය වැනි temp=`ls -a` echo $temp විධානයක් ක්‍රියාත්මක කිරීමට අවශ්‍ය නම් `` දෝෂ ඇතිවේ.

පහත විධානය මඟින් මෙම ගැටළුව විසඳනු ඇත ssh user@host ''' temp=`ls -a` echo $temp '''


1

මෙහි පිළිතුර ( https://stackoverflow.com/a/2732991/4752883 ඔබ භාවිතා දුරස්ථ Linux පරිගණකයක් මත කේත රචනය ක්රියාත්මක කිරීමට උත්සාහ කරන්නේ නම්,) මහා වැඩ plinkහෝ ssh. ස්ක්‍රිප්ටයේ පේළි කිහිපයක් තිබේ නම් එය ක්‍රියා කරයි linux.

** කෙසේ වෙතත්, ඔබ දේශීය linux/windowsයන්ත්‍රයක පිහිටා ඇති කණ්ඩායම් ස්ක්‍රිප්ට් එකක් ධාවනය කිරීමට උත්සාහ කරන්නේ නම් සහ ඔබේ දුරස්ථ යන්ත්‍රය තිබේ නම් Windows, එය භාවිතා කරමින් පේළි කිහිපයකින් සමන්විත වේ **

plink root@MachineB -m local_script.bat

වැඩ කරන්නේ නැහැ.

ස්ක්‍රිප්ටයේ පළමු පේළිය පමණක් ක්‍රියාත්මක වේ. මෙය බොහෝ විට සීමාවකි plink.

විසඳුම 1:

බහුවිධ කණ්ඩායම් පිටපතක් ධාවනය කිරීම සඳහා (විශේෂයෙන් එය සාපේක්ෂව සරල නම්, පේළි කිහිපයකින් සමන්විත වේ):

ඔබේ මුල් කණ්ඩායම් පිටපත පහත පරිදි නම්

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

ඔබේ local_script.batගොනුවේ පහත පරිදි "&&" බෙදුම්කරු භාවිතා කර ඔබට පේළි ඒකාබද්ධ කළ හැකිය : https://stackoverflow.com/a/8055390/4752883 :

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

මෙම වෙනසෙන් පසුව, ඔබට මෙහි පෙන්වා ඇති පරිදි ස්ක්‍රිප්ට් එක ධාවනය කළ හැකිය @ ජේසන් ආර්. කුම්බ්ස්: https://stackoverflow.com/a/2732991/4752883 සමඟ:

`plink root@MachineB -m local_script.bat`

විසඳුම 2:

ඔබගේ කණ්ඩායම් ස්ක්‍රිප්ට් සාපේක්ෂව සංකීර්ණ නම්, @ මාර්ටින් 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

1

මෙම bash ස්ක්‍රිප්ට් ඉලක්කගත දුරස්ථ යන්ත්‍රයකට ssh කරන අතර දුරස්ථ යන්ත්‍රයේ යම් විධානයක් ක්‍රියාත්මක කරයි, එය ක්‍රියාත්මක කිරීමට පෙර අපේක්ෂාව ස්ථාපනය කිරීමට අමතක නොකරන්න (මැක් මත brew install expect)

#!/usr/bin/expect
set username "enterusenamehere"
set password "enterpasswordhere"
set hosts "enteripaddressofhosthere"
spawn ssh  $username@$hosts
expect "$username@$hosts's password:"
send -- "$password\n"
expect "$"
send -- "somecommand on target remote machine here\n"
sleep 5
expect "$"
send -- "exit\n"

1
ඔබ මුරපද භාවිතා කළ යුතු නම් මෙය ඉතා හොඳයි ... කෙසේ වෙතත් නිවසේදී නරඹන ඕනෑම කෙනෙකුගේ ප්‍රයෝජනය සඳහා ඕනෑම ssh විධානයක් භාවිතා කළ යුත්තේ මුරපද නොවන පොදු + පුද්ගලික යතුරු යුගලයකි ... මුරපද සම්පූර්ණයෙන්ම වසා දැමීමට ඔබේ ssh සේවාදායකය යාවත්කාලීන කරන්න
ස්කොට් ස්ටෙන්ස්ලන්ඩ්

0

ඔබට runoverssh භාවිතා කළ හැකිය :

sudo apt install runoverssh
runoverssh -s localscript.sh user host1 host2 host3...

-s දේශීය ස්ක්‍රිප්ටයක් දුරස්ථව ධාවනය කරයි


ප්‍රයෝජනවත් කොඩි:
-g සියලුම ධාරකයන් සඳහා ගෝලීය මුරපදයක් භාවිතා කරන්න (තනි මුරපද විමසුමක්)
-nsshpass වෙනුවට SSH භාවිතා කරන්න, එය පොදු යතුරු සත්‍යාපනය සඳහා ප්‍රයෝජනවත් වේ


0

එය එක් පිටපතක් නම් ඉහත විසඳුම සමඟ එය හොඳයි.

මම ජොබ් එක කරන්න ඇන්සිබල් හදනවා . එය එකම ආකාරයකින් ක්‍රියාත්මක වේ (යුනික්ස් හෝ වින්ඩෝස් යන දෙකටම දුරස්ථ යන්ත්‍රයේ ස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීමට ඇන්සිබල් ssh භාවිතා කරයි).

එය වඩාත් ව්‍යුහාත්මක හා නඩත්තු කළ හැකි වනු ඇත.


-24

පළමුව, scp භාවිතයෙන් පිටපත යන්ත්‍ර B වෙත පිටපත් කරන්න

[user @ machineA] $ scp / path / to / script user @ machineB: / home / user / path

ඉන්පසු, පිටපත ධාවනය කරන්න

[user @ machineA] $ ssh user @ machineB "/ home / user / path / script"

ඔබ ස්ක්‍රිප්ටයට ක්‍රියාත්මක කළ හැකි අවසරයක් ලබා දී ඇත්නම් මෙය ක්‍රියාත්මක වේ.


හායි මම නිර්දේශිත යෝජනාවක් ඉදිරිපත් කළ නමුත් එය මට පහත දෝෂයක් ලබා දෙයි [oracle @ node1 ~] $ ssh oracle @ node2: ./ home / oracle / au / fs / conn.sh ssh: node2: ./ home / oracle / au / fs / conn.sh: නම හෝ සේවාව නොදනී [oracle @ node1 ~] $

'ssh oracle @ node2: ./ home / oracle / au / fs / conn.sh'? වැරදි විධාන රේඛාව, විධාන නාමය පරිශීලකයාගෙන් වෙන් කළ යුතුය @ ධාරක කොටස අවකාශයක් මිස මහා බඩවැලක් නොවේ.
bortzmeyer

8
මම මෙය පහත් කොට සලකන්නේ එය පිටපත් නොකර ධාවනය කළ නොහැකි බවට වන මූලික ප්‍රකාශය වැරදිය.
ජේසන් ආර්. කුම්බ්ස්

සරලවම කාරණය පැවසීම වෙනුවට එය වැරදියි කියා ජේසන් එකතු කිරීම ප්‍රයෝජනවත් වනු ඇත. උදව්වක් නැත.
ක්‍රිස්

[user @ machineA] $ ssh root @ MachineB 'bash -s' </ machinea / path / to / script
Oleksii Kyslytsyn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.