මුරපද විමසුමක් නොමැතිව ස්වයංක්‍රීයව ssh-add ධාවනය කරන්නේ කෙසේද?


267

SSH හරහා මගේ ජාලයේ (ස්ථිතික ඊතර්නෙට්) පරිගණක කිහිපයක් අතර සන්නිවේදනය කිරීමට මට අවශ්‍යය. එය සිදු කිරීම සඳහා, මම විශේෂිත යන්ත්‍රයකට පිවිසෙන සෑම අවස්ථාවකම ssh-add ධාවනය කළ යුතු අතර, එය එක් වරක් සකසා ඇති පරිදි එය කරන්නේ කෙසේද සහ මා පිවිසෙන විට හෝ නැවත ආරම්භ කරන සෑම අවස්ථාවකම එය මුරපදය ඉල්ලන්නේ නැත. මගේ යන්ත්‍රය?

ඔබ bash_profileගොනුවට පේළි කිහිපයක් එකතු කළ යුතු ක්‍රමයක් ඇති බව මම දනිමි , නමුත් මම නිශ්චිත යන්ත්‍රයකට නැවත පණගැන්වීමේදී / ලොග් වූ සෑම අවස්ථාවකම මුරපදය ටයිප් කිරීමට අවශ්‍යය.

if [ -z "$SSH_AUTH_SOCK" ] ; then
    eval `ssh-agent -s`
    ssh-add
fi


stackoverflow.com/a/52671286/217408 මට බිට්වර්ඩන් වෙතින් මුරපදය යැවීම සඳහා එය විසඳා ඇත
zoechi

Answers:


372

ආරක්ෂාව සහ පහසුව අතර වෙළඳාමක් සඳහා මෙය සාමාන්‍ය උදාහරණයකි. වාසනාවකට විකල්ප ගණනාවක් තිබේ. වඩාත්ම සුදුසු විසඳුම භාවිතා කිරීමේ තත්ත්වය සහ අපේක්ෂිත ආරක්ෂාව පිළිබඳ මට්ටම මත රඳා පවතී.

මුරපදය සහිත ssh- යතුර, නැත ssh-agent

සත්‍යාපනය සඳහා යතුර භාවිතා කරන සෑම අවස්ථාවකම මුරපදය ඇතුළත් කළ යුතුය. ආරක්ෂක දෘෂ්ටි කෝණයකින් මෙය හොඳම විකල්පය වන අතර, එය නරකම භාවිතාව ලබා දෙයි. මෙය දුර්වල මුරපදයක් පිළිවෙලට තෝරා ගැනීමට ද හේතු විය හැකිය - නැවත නැවත එයට ඇතුල් වීමේ බර අඩු කිරීම.

මුරපදය සමඟ ssh- යතුර, සමඟ ssh-agent

පහත සඳහන් දෑ එකතු කිරීමෙන් ~/.bash_profileස්වයංක්‍රීයව ආරම්භ ssh-agentවන අතර ප්‍රවේශවීමේදී ssh-key (ය) පූරණය වේ:

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add
fi

දැන් සෑම පිවිසුමකටම මුරපදය ඇතුළත් කළ යුතුය. උපයෝගීතා දෘෂ්ටිකෝණයකින් තරමක් හොඳ ssh-agentවුවත්, පිවිසුම් සැසියේදී යතුර භාවිතා කළ යුතුද නැද්ද යන්න නොසලකා මුරපදය ඉල්ලා සිටින අඩුපාඩුව මෙයයි . සෑම නව පිවිසුමක්ම ssh-agentපැහැදිලිව මරුමුවට පත් නොවන්නේ නම්, පිටවීමෙන් පසුව වුවද එකතු කළ යතුරු මතකයේ රැඳී පවතී.

ssh_agentලොග්අවුට් වලදී kill ාතනය කිරීමට, පහත සඳහන් දේ එකතු කරන්න~/.bash_logout

if [ -n "$SSH_AUTH_SOCK" ] ; then
  eval `/usr/bin/ssh-agent -k`
fi

හෝ පහත සඳහන් දේ සඳහා ~/.bash_profile

trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0

කොලින් ඇන්ඩර්සන්ගේ පිළිතුරssh-agent වැනි ගොනු පද්ධතියේ ස්ථාවර ස්ථානයක නියෝජිතයාට නිරන්තර සන්නිවේදන සොකට් එකක් සෑදීමෙන් අවස්ථා කිහිපයක් නිර්මාණය කිරීමෙන් වළක්වා ගත හැකිය . කෙසේවෙතත්, බහුවිධ කාරක අවස්ථා බිහි කිරීමට වඩා මෙය වැඩිදියුණු කිරීමකි.

ඩෙස්ක්ටොප් පරිගණක වලදී, ග්නෝම් කීරිං එස්එස්එච් ඒජන්ත වැනි ඩෙස්ක්ටොප් පරිසරය සමඟ ඇතුළත් කර ඇති එස්එස්-ඒජන්තයින්ට වඩා හොඳ ප්‍රවේශයක් විය හැකි බැවින් ඒවා සාමාන්‍යයෙන් මුරපදය සඳහා විමසීමට හැකි වන අතර පළමු වරට පිවිසුම් සැසියකදී එස්එස්-යතුර භාවිතා කරන අතර විකේතනය කළ පුද්ගලික යතුර සැසිය අවසන් වන තෙක් මතකයේ ගබඩා කරන්න.

මුරපදය සමඟ ssh- යතුර, සමඟ ssh-ident

ssh-identයනු ssh-agentඔබ වෙනුවෙන් කළමනාකරණය කළ හැකි සහ අවශ්‍ය පරිදි අනන්‍යතා පැටවිය හැකි උපයෝගීතාවයකි . A ට ප්‍රවේශය අවශ්‍ය වන පර්යන්ත, ssh හෝ පිවිසුම් සැසි කීයක් නොසලකා එය අවශ්‍ය වන්නේ එක් වරක් පමණි ssh-agent. ධාරකයට සම්බන්ධ වී ඇති ආකාරය අනුව වෙනස් නියෝජිතයෙකු සහ විවිධ යතුරු කට්ටලයක් එක් කිරීමට හා භාවිතා කිරීමට එයට හැකිය, නැතහොත් ssh නාමාවලිය ආයාචනය කරයි. විවිධ ධාරකයන් සමඟ නියෝජිත ඉදිරියට යැවීමේදී යතුරු හුදකලා කිරීමට මෙය ඉඩ දෙයි. GitHub වැනි වෙබ් අඩවි වල බහු ගිණුම් භාවිතා කිරීමට ද එය ඉඩ දෙයි.

සක්‍රිය කිරීමට ssh-ident, එය ස්ථාපනය කර පහත දැක්වෙන අන්වර්ථය ඔබගේ ~/bash_profile:

alias ssh='/path/to/ssh-ident'

මුරපදය සමඟ ssh- යතුර, සමඟ keychain

keychainssh-agentඔබ වෙනුවෙන් කළමනාකරණය කරන කුඩා උපයෝගීතාවයක් වන ssh-agentඅතර පිවිසුම් සැසිය අවසන් වූ විට දිගටම ක්‍රියාත්මක වීමට ඉඩ සලසයි . පසුකාලීන පිවිසුම් වලදී, keychainපවතින අවස්ථාවට සම්බන්ධ වේ ssh-agent. ප්‍රායෝගිකව, මෙයින් අදහස් කරන්නේ මුරපදය ඇතුළත් කළ යුත්තේ නැවත ආරම්භ කිරීමෙන් පසු පළමු පිවිසුම් කාලය තුළ පමණක් බවයි. පසුකාලීන පිවිසුම් වලදී, පවතින ssh-agentඅවස්ථාවෙන් සංකේතාංකනය නොකළ යතුර භාවිතා වේ. cronමුරපද රහිත ssh- යතුරු නොමැතිව රැකියා වලදී මුරපද රහිත RSA / DSA සත්‍යාපනය සඳහා ඉඩ ලබා දීම සඳහා මෙය ප්‍රයෝජනවත් වේ .

සක්‍රිය කිරීමට keychain, එය ස්ථාපනය කර පහත සඳහන් දෑ එකතු කරන්න ~/.bash_profile:

eval `keychain --agents ssh --eval id_rsa`

ආරක්ෂක දෘෂ්ටි කෝණයකින්, ssh-identසහ යම් සැසියක ජීවිත කාලය සඳහා සීමා වූ අවස්ථාවන්ට keychainවඩා නරක ය ssh-agent, නමුත් ඒවා ඉහළ මට්ටමේ පහසුවක් ලබා දෙයි. ආරක්ෂාව වැඩි දියුණු කිරීම සඳහා keychain, සමහර අය --clearඔවුන්ගේ ~/.bash_profileයතුරුපුවරු ආයාචනයට විකල්පය එක් කරති . මෙම මුරපද සිදු කිරීමෙන් ඉහත පරිදි නැවත පිවිසීමේදී නැවත ඇතුළත් කළ යුතුය, නමුත් cronපරිශීලකයා ඉවත් වූ පසු රැකියා සඳහා සංකේතාංකනය නොකළ යතුරු වෙත ප්‍රවේශය ඇත. මෙම keychain විකි පිටුව වැඩි විස්තර සහ උදාහරණ ඇත.

මුරපදය නොමැතිව ssh-key

ආරක්ෂක දෘෂ්ටි කෝණයකින් බලන කල, නරකම විකල්පය වන්නේ පුද්ගලික යතුර නිරාවරණය වුවහොත් එය සම්පූර්ණයෙන්ම අනාරක්ෂිත බැවිනි. කෙසේ වෙතත්, නැවත පණගැන්වීමෙන් පසු මුරපදය නැවත ඇතුළත් කිරීම අවශ්‍ය නොවන බවට සහතික විය හැකි එකම ක්‍රමය මෙයයි.

මුරපදය සමඟ ssh- යතුර ssh-agent , මුරපදය ස්ක්‍රිප්ට් සිට සම්මත කිරීමssh-add

මුරපදය පිටපතකින් යැවීම සරල අදහසක් සේ පෙනෙන්නට තිබුණද ssh-add, උදා: echo "passphrase\n" | ssh-addමෙය මුරපදය ssh-add කියවා නැතිstdin/dev/tty තරම් සෘජු නොවේ, නමුත් කියවීම සඳහා කෙලින්ම විවෘත වේ .

මෙම ගත හැකි පමණ වැඩ සමග expect, අන්තර් අයදුම්පත් automating සඳහා මෙවලමක්. පහත දැක්වෙන්නේ ස්ක්‍රිප්ටයේ ගබඩා කර ඇති මුරපදයක් භාවිතා කරමින් ssh යතුරක් එක් කරන ස්ක්‍රිප්ටයක උදාහරණයකි:

#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "passphrase\n";
expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)"
interact

ආරක්ෂක දෘෂ්ටි කෝණයකින් මුරපදය ස්ක්‍රිප්ටයේ සරල පෙළෙහි ගබඩා කර ඇති බැවින්, මුරපද රහිත ssh- යතුරක් තිබීමට වඩා මෙය හොඳ නැති බව සලකන්න. මෙම ප්‍රවේශය භාවිතා expectකිරීමට නම්, මුරපදය අඩංගු ස්ක්‍රිප්ටයට නිසි අවසරයන් ඇති බවට වග බලා ගැනීම වැදගත් වන අතර එය කියවිය හැකි, ලිවිය හැකි සහ ධාවනය කළ හැකි වන්නේ ප්‍රධාන හිමිකරුට පමණි.


1
හරි, නමුත් මම ඔබේ කේතය ~ / .bash_profile වෙත දැමූ විට, මම පුරනය වන සෑම අවස්ථාවකම මුරපදය ටයිප් කළ යුතුය, මට එයද අවශ්‍ය නොවේ. මම කිසිසේත්ම ආරක්ෂාව ගැන තැකීමක් නොකරමි. echo "pass \ n" | ssh-add වැඩ කරන්නේ නැත
zdun8

3
@ user1607072 ඔව්, ඒක ආකාරය වේ ssh-agentදී ඇබිත්ත ~/.bash_profileපිළිතුර තුළ ලෙස හැසිරෙනු පැහැදිලි කළේය. ඔබට keychainඋපයෝගීතාව දෙස බැලීමට අවශ්‍ය විය හැකිය . සමග keychainඔබ නැවත පසු, එහෙත් ඉන් පසු සිදුවෙන පිවිසුම් මත පළමු පිවිසුම් මත මුර පදය භාවිතා කරන්න keychain, දැනට පවතින හා සම්බන්ධ වනු ඇත ssh-agentමතක ඇති decrypted යතුර උදාහරණයක්. ඒ හැරුණු විට මුරපදයක් නොමැතිව ssh- යතුරක් ජනනය කිරීමේ විකල්පයක් ඇත, නමුත් මෙය ඇත්ත වශයෙන්ම නිර්දේශ නොකරයි.
තෝමස් නයිමන්

3
@ user1607072 වඩාත් ආරක්ෂිත ප්‍රවේශයන්ගෙන් එකක් මම තරයේ යෝජනා කරන අතර, මුරපදය ස්ක්‍රිප්ට් එකකින් යැවීමට ක්‍රමයක් තිබේ ssh-add. හේතුව echo "pass\n" | ssh-addක්‍රියා නොකරන්නේ ssh-addමුරපදය කියවන්නේ නැති stdinනමුත් /dev/ttyකියවීම සඳහා කෙලින්ම විවෘත වේ . නමින් හැඳින්වෙන උපයෝගීතාවයක් භාවිතා කරමින් මේ සඳහා විසඳුම් ඇතුළත් කිරීමට පිළිතුර යාවත්කාලීන කරන ලදි expect.
තෝමස් නයිමන්

1
@ user1607072 එය ඔබේ භාවිතය නඩුව සඳහා ටිකක් overkill විය හැකි, නමුත් Kerberos ssh සංයෝජනය GSSAPI සහාය passwordless ssh සිදුවෙන පිවිසුම් සඳහා ද භාවිතා කළ හැක. Ssh හි අනුරූප සත්‍යාපන ක්‍රමය හැඳින්වේ gssapi-with-mic. මෙය සාමාන්‍යයෙන් විශාල ජාල වල භාවිතා වේ, නමුත් ඇත්ත වශයෙන්ම ඔබට මේ පිළිබඳව උනන්දුවක් ඇත්නම් එය සොයා බැලීම වටී.
තෝමස් නයිමන්

1
Rick එරික් බ්‍රවුන්: දැනටමත් මෙහි පිළිතුරු දී ඇත . Systemd පිවිසුම් කළමණාකරු තුළ පරිශීලක කල් ඉකුත්වීම අක්‍රීය කර ඇත්නම් SSH නියෝජිත ඒකකය ලොග්අවුට් කිරීමේදී නතර කළ යුතුය . පරිශීලක කල් ඉකුත්වීම සක්‍රිය කර ඇත්නම්, අවසාන පිවිසුම් සැසිය වසා දැමීමෙන් පසුව පවා systemd පරිශීලක උදාහරණය සහ SSH නියෝජිත ඒකකය ක්‍රියාත්මක වේ.
තෝමස් නයිමන්

107

මෙය ඔබගේ ~/.bashrc, පසුව ඉවත් වී බලාත්මක වීමට නැවත ඇතුල් කරන්න.

if [ ! -S ~/.ssh/ssh_auth_sock ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock
fi
export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock
ssh-add -l > /dev/null || ssh-add

මෙය නැවත ආරම්භ කිරීමෙන් පසු පළමු වරට මුරපදයක් ඉල්ලා සිටිය යුතුය. එය ක්‍රියාත්මක වන ssh-agentතාක් කල් එය නැවත භාවිතා කරයි .


1
ඉතා පිළිවෙලට, මේ ආකාරයෙන් ඔබ සතුව ඇත්තේ එක් එස්එස්-ඒජන්තවරයකු පමණි (: @ තෝමස් නයිමන්ගේ දෙවන විසඳුම මෙන් බහු නියෝජිතයින් මට ආරක්ෂිත අවදානමක් සේ පෙනේ ...
ඩ්‍රෙවිකෝ

1
විවිධ වෙබ් අඩවි වල පර්යේෂණ කිරීමෙන් සහ විවිධ විසඳුම් කියවීමෙන් පසුව, මෙය පැහැදිලි, කෙළින්ම කාරණය ලෙස පෙනේ. ඉතා කදිමයි. +1
ආචාර්ය බෙකෝ

1
මෙය සිදු කිරීම වඩා හොඳය: `අන්වර්ථය ssh = ssh-check-agent", සහ චෙක්-ඒජන්ත අනුවාදය ඉහත සඳහන් දේ කරන්න. ඒ ආකාරයෙන්: අ) ඔබට ලැබෙන්නේ එක් නියෝජිතයෙකු පමණක් වන අතර ආ) ඔබට අවශ්‍ය වන්නේ නියෝජිතයා පමණි
එරික් ඇරොනෙස්ටි

2
මම හිතන්නේ -s යනු පෙරනිමිය, එබැවින් අපි දැනටමත් එය කරමින් සිටිමු.
කොලින් ඇන්ඩර්සන්

3
ssh-addතර්ක නොමැතිව එකතු වන බව සලකන්න ~/.ssh/id_rsa. ssh-addඔබේ පුද්ගලික යතුරු වෙනත් ගොනුවක තිබේ නම් ඔබට තර්ක ඉදිරිපත් කිරීමට අවශ්‍ය විය හැකිය .
මතියස් බ්‍රවුන්

18

OP හි ප්‍රශ්නයට සමීපව සම්බන්ධ නොවන නමුත් එය අනෙක් අයට ප්‍රයෝජනවත් විය හැකිය: 7.2.0 ssh (1) හි විකල්පයක් ඇති බැවින් පළමු සත්‍යාපනය මත ssh-agent වෙත යතුරක් එක් කිරීමට ඉඩ දෙයි; විකල්පයකි AddKeysToAgentහා සකස් කළ හැක yes, no, ask, හෝ confirm, systemwide හෝ ඔබේ පෞද්ගලික මත .ssh/configගොනු.

යොමුව: https://www.openssh.com/txt/release-7.2


3
.ssh/configගොනුවට අළුත් අයට අදාළ වේ: මෙය අදාළ වන sshඅතර sshඑය පිටුපස භාවිතා කරන ඕනෑම දෙයකට , උදාහරණයක් ලෙස scp, එක් සත්කාරක පදනමක් මත කළ හැකිය.
SEoF

මම පිවිසෙන සෑම අවස්ථාවකම එය තවමත් මුරපදය ඉල්ලා සිටින අතර උදාහරණයක් ලෙස git pull කිරීමට උත්සාහ කරයි.
trainoasis

rantrainosis ගැටළුව වන්නේ අනාගත භාවිතය සඳහා විකේතනය කළ යතුර (ය) මතකයේ රඳවා තබා ගැනීමට ඔබට ssh-agent නිදසුනක් නොමැති වීමයි. ඔබට අවශ්‍ය වන්නේ ssh-agent භාවිතා කරන විට දී ඇති යතුරක් සඳහා මුරපදය ඇතුළත් කිරීමේ සැසියකට එක් වරක් පමණි.
eestrada

7

ssh-agent විවිධ අගුළු හරින ලද ssh- යතුරු හැඹිලි මඟින් ඔබට මුරපද මඟින් ssh- යතුරු ආරක්ෂා කර ගත හැකිය, නමුත් සෑම අවස්ථාවකම ඒවා ටයිප් නොකර.

අගුළු හරින ලද යතුරු හැඹිලි කිරීම සඳහා, එය පැහැදිලිවම එම යතුරු අගුළු ඇරීමට අවශ්‍ය වේ. මුරපදයකින් අගුළු දමා ඇති යතුරු අගුළු ඇරීම සඳහා, එය පැහැදිලිවම මෙම මුරපද දැන සිටිය යුතුය.

මිනිසෙකුගෙන් අවසරයක් අවශ්‍ය නොවන ඕනෑම ක්‍රමයක් (උදා: "මුරපදයක් ටයිප් කිරීම") ඔබේ පද්ධතිය අනාරක්ෂිත කරයි. එය ssh-agent හි සම්පූර්ණ අරමුණ අර්ථ විරහිත කරයි.

මේ සියල්ල පැවසීමෙන් පසු, ඔබට මුරපදයකින් ආරක්‍ෂිත නොවන ssh- යතුරු භාවිතා කළ හැකිය ( Enterයතුරු උත්පාදනය අතරතුර මුරපදයක් ඉල්ලූ විට පහර දෙන්න ). මුරපදයක් ssh-agentනොමැති බැවින්, එය හැඹිලිගත කිරීම සඳහා ඔබෙන් එකක් ඉල්ලීමට අවශ්‍ය නැත.


මම එකඟ වෙමි, ඔබේ යතුරු නිසි ලෙස පරිශීලකයාට පමණක් අවසර දී ඇති තාක් කල්, අවසර රහිත යතුරු වලට වඩා ssh- නියෝජිතයාට එතරම් වාසියක් නැත. මම පිවිසුම් සේවාදායකයකට මාරුවීමට කැමතියි, ඉන්පසු එම සේවාදායකයට අවසර රහිත යතුරු පොකුරක් ඇති අතර, ඒ සෑම එකක්ම භාවිතා කළ හැක්කේ වෙනත් සේවාදායකයක් අගුළු ඇරීමට පමණි. පිවිසුම් සේවාදායකය වෙන කිසිවක් නොකරයි, එබැවින් එය අනවසරයෙන් / කොල්ලකෑමට වඩා අපහසුය ... අනෙක් සේවාදායකයන්ට මුරපද ප්‍රවේශයක් නොමැත, යතුරු පමණි.
එරික් ඇරොනෙස්ටි

5

ඔබේ SSH මුරපදය ස්වයංක්‍රීය කිරීම සඳහා වන ක්‍රියාමාර්ගයක් මෙන්න.

  1. ඔබගේ මුරපදය සම්මත ප්‍රතිදානය වෙත මුද්‍රණය කරන එක්-ලයිනර් ස්ක්‍රිප්ටයක් සාදන්න, උදා:

     echo 'echo MY_SSH_PASSWORD' > ~/.print_ssh_password && chmod 700 ~/.print_ssh_password
    

    වැදගත්: ඔබගේ මුරපදය ඔබගේ ඉතිහාසයට ගබඩා කිරීම වැළැක්වීම සඳහා ප්‍රමුඛ අවකාශය පිටපත් කිරීම සහතික කරන්න .

පහත ක්‍රම වලින් එකක් භාවිතා කරන්න.


2
මෙම echo my_passphraseවිශාල ආරක්ෂක සිදුරු ඇත. ඔබ එය ටයිප් කළ පසු, මුරපදය ඔබ භාවිතා කරන කවචයේ ඉතිහාස ගොනුවේ පැහැදිලි පා text යක ඇත. දෙවන විධාන රේඛා තර්ක යුනික්ස් ( ps -ef) මත ලෝකයට කියවිය හැකිය. කිසි විටෙක මුරපද විධාන රේඛා තර්ක වලට ඇතුළත් නොකරන්න!
ceving

1
leadceving අමතර ප්‍රමුඛ ඉඩක් එක් කිරීම ඉතිහාස ගොනුවේ ගැටළුව විසඳයි. අමතර තොරතුරු එක් කරන ලදි.
kenorb

@kenorb: එය psප්‍රතිදානයේ පෙනෙන මුරපදයේ විශාල ගැටළුව විසඳන්නේ නැත . ඉතිහාස ගොනුව සාමාන්‍යයෙන් කියවිය හැක්කේ කෙසේ හෝ අයිති පරිශීලකයාට පමණි, නමුත් විධාන රේඛා පද්ධතියක සියලුම පරිශීලකයින්ට කියවිය හැකිය.
තෝමස් නයිමන්

4

පිවිසීමේදී ssh-add (ssh-agent විවෘත කිරීමට අවශ්‍ය) මම ඔබට නිර්දේශ නොකරමි. මෙයට හේතුව ssh-agent කොටස අවසන් වන විට ඔබට පාලනය කළ නොහැකි අතර එක් පිවිසුම් කොටසක යතුරු ගොනු භාවිතා කිරීමට අවශ්‍ය නොවන විට ආරක්ෂක අවදානමක් ඇති කළ හැකිය.

ඒ වෙනුවට, මම නිර්දේශ කරන්නේ ssh-agent හි උප-කවචය විවෘත කරන ස්ක්‍රිප්ට් එකක් ලිවීමටයි, සියලු යතුරු ගොනු ස්වයංක්‍රීයව එකතු කර ඇති අතර ssh භාවිතා කිරීමට අවශ්‍ය විට එය කැඳවනු ලැබේ. ඔබට එය සම්මත කර ගත හැකි නම්, කියවන්න.

ඔබට තේරීම් දෙකක් ඇත:

  1. ඔබගේ යතුරු සඳහා වන සියලුම මුරපද ඉවත් කරන්න , ඔබේ යතුරු ලිපිගොනු සොරකම් කර ඇත්නම් දුර්වල ආරක්ෂාවක් ඇත. (මේ අනුව නිර්දේශ නොකරයි )

  2. ඔබගේ යතුරු සඳහා එකම මුරපදය භාවිතා කරන්න. එවිට ඔබට ssh-add keyfile1 keyfile2 ..., ඔබට අවශ්‍ය වන්නේ එක් කොටසකට මුරපදය එක් වරක් පමණි.

අවස්ථා දෙකේදීම, ඔබට එවැනි ස්ක්‍රිප්ට් ගොනුවක් "ssh_keys_section.sh" ලෙස පහත පරිදි ලිවිය හැකිය:

#!/bin/bash
# This script run a ssh-agent on a sub-shell and automatically ssh-add all keyfiles at once.
# This agent ends when you type `exit` to close the sub-shell.
exec ssh-agent bash -c "ssh-add /path/to/keyfile1 /path/to/keyfile2 ...; exec bash"

සටහන්:

  • මුරපදය වෙනස් කිරීමට හෝ මකා දැමීමට අණ කරන්න: ssh-keygen -p -f keyfile
  • උප කවචය තුළ, එකම අගුළු හරින ලද යතුරු බෙදාගන්නා තවත් පර්යන්ත පවා ඔබ විසින් ලබා ගත හැකිය, සමහර විට /path/to/yourterminal &(OS මත රඳා පවතී) වැනි විධානයක් භාවිතා කිරීමෙන්

උදා: සිග්වින් තුළ වින්ඩෝස් මත, /path/to/yourterminal &==>mintty &
ජොනී වොං

අදහස් දැක්වීම්: භාවිතය පසු, සැසියෙහි වසා ctrl-dහෝ exitඔබ පිළිතුරු පැතැලිව පළ කළහ කළාක් මෙන් bashෂෙල් හා එය අවසන් කළ යුතුය.
ජොනී වොන්

2
if [ ! -S ${HOME}/.ssh/ssh_auth_sock ]; then
  eval $(ssh-agent)
  ln -sf "${SSH_AUTH_SOCK}" ${HOME}/.ssh/ssh_auth_sock
fi
export SSH_AUTH_SOCK=${HOME}/.ssh/ssh_auth_sock

ssh_keys=$(find -E ~/.ssh -type f -regex '.*(rsa$|pem)')
ssh_agent_keys=$(ssh-add -l | awk '{key=NF-1; print $key}')

for k in "${ssh_keys}"; do
    for l in "${ssh_agent_keys}"; do
        if [[ ! "${k}" = "${l}" ]]; then
            ssh-add "${k}" > /dev/null 2>&1
        fi
    done
done

2

මම වාෂ්ප බලයෙන් සඳහන් කළ ස්ක්‍රිප්ට් එක භාවිතා කළෙමි, මම දැන් පහත එක සකස් කර ඇත්තෙමි.

zshෂෙල් මත පමණක් වැඩ කිරීම .

#!/bin/sh

AGENT_BIN=`which ssh-agent`
AGENT_ADD_BIN=`which ssh-add`
AGENT_PID=`ps -fe | grep ${AGENT_BIN} | awk -vuser=$USER -vcmd="$AGENT_BIN" '$1==user && $8==cmd{print $2;exit;}'`
if [ -z "$AGENT_BIN" ]; then
    echo "no ssh agent found!";
    return
fi
if [ "" -eq "$AGENT_PID" ]; then
    if read -sq "YN?Do you want to unlock your ssh keys?"; then
        echo ""
        output=`$AGENT_BIN | sed 's/echo/#echo/g'`
        eval $output
        $AGENT_ADD_BIN
    fi
else
    for f in "/proc/"*
    do
        cmdline=`cat "$f/cmdline"`
        if [ "${AGENT_BIN}" -ef "${cmdline}" ]; then
            export SSH_AUTH_SOCK=`cat $f/net/unix | grep --binary-file=text -oP '((/[^/]*?)+/ssh-[^/]+/agent\.\d+$)'`
            export SSH_AGENT_PID=${f##*/}
            break;
        fi
    done
fi

1
SSH_ENV="$HOME/.ssh/environment"

function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
     echo succeeded
     chmod 600 "${SSH_ENV}"
     . "${SSH_ENV}" > /dev/null
     /usr/bin/ssh-add;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
         start_agent;
     }
else
     start_agent;
fi

මෙහි ණය ලබා දීම: https://www.cygwin.com/ml/cygwin/2001-06/msg00537.html

මෙම විසඳුම ද මෙහි දී අනුමත කර ඇත: http://mah.everybody.org/docs/ssh


1

එස්එස්එච් සඳහා විසඳුම පිළිබඳ තනි ලකුණක් මා වෙත යොමු කළ හැකිය pam_ssh.

මෙම ලිපියට අනුව , සංකල්පය:

ඔබ ssh හරහා බහු * නික්ස් මත පදනම් වූ යන්ත්‍ර සමඟ වැඩ කරන්නේ නම්, ඔබට වෙනත් පෙට්ටියකට පිවිසීමට අවශ්‍ය සෑම අවස්ථාවකම ඔබේ මුරපදය නිරන්තරයෙන් ඇතුළත් කිරීමට ඔබ වෙහෙසට පත් වනු ඇත. වෙනත් මුරපදයක් ඇතුළත් නොකර (ඔබට මුලින් අත්සන් කළ යන්ත්‍රය හැර) ඔබට සෑම යන්ත්‍රයකටම ප්‍රවේශ වීමට ඉඩ සලසන ආරක්ෂිත ක්‍රමයක් තිබේ.


මෙය සැබවින්ම සෑහෙන්න සරල ය, ඔබ මූලිකවම ඔබේ අනෙක් යන්ත්‍ර වෙත සත්‍යාපනය කිරීම සඳහා පොදු / පෞද්ගලික යතුරු යුගලයක් සාදන්න, ඉන්පසු ඔබ පිවිසීමෙන් පසු ඔබේ යතුරු පැටවීම සඳහා PAM නියෝජිතයෙකු බිහි කරන්න, ඔබේ දුරස්ථයට ප්‍රවේශ වීමට තනි සං sign ා විසඳුමක් සපයයි. යන්ත්‍ර. මෙම මාර්ගෝපදේශය මෙය සැකසීමෙන් ඔබව ගෙන යනු ඇත.

මෙය සත්‍ය වශයෙන්ම ක්‍රියාත්මක වනු ඇතැයි මම තහවුරු කර නැත.


0

මෙය ඔබගේ ~/.bashrcගොනුවට එක් කරන්න :

ssh-add -L|grep identities > /dev/null && ssh-add /path/to/ssh/private/key

මෙය ප්‍රශ්නයට සම්බන්ධ වන්නේ කෙසේදැයි මම නොදනිමි, එය පසුකාලීන පිවිසුම් වල මුරපදය ඉල්ලා නොසිටීමයි.
ක්‍රිස් ඩවුන්

0

(සමහර විට මුරපද රහිත) යතුරක් එක් කිරීම සහ ssh-addමුරපදයක් ඉල්ලා නොසිටින බව සහතික කිරීම සඳහා, කුමක් වුවත්, යටින් ධාවනය වන විට පවා X :

DISPLAY= ssh-add -k /path/to/key </dev/null &>/dev/null

පිටවීමේ තත්වය පෙන්නුම් කරන්නේ සාර්ථකත්වය හෝ අසාර්ථකත්වයයි.


0

ඔබ මුරපද කළමනාකරු ලෙස මුහුදු අශ්වයා ධාවනය කරන්නේ නම් ... ඔබ බොහෝ විට; ඩී

ඔබ සොයන ඉලක්කය සපුරා ගත හැකි තවත් විසඳුමක් නම්, පිවිසීමේදී ස්වයංක්‍රීයව අගුළු ඇරීම සඳහා මුහුදු අශ්වයාට ssh යතුරු එක් කිරීමයි. මෙහි ඇති ප්‍රධාන වාසිය නම්, ඔබ gdm හරහා පිවිසීමෙන් පසු යතුරු සඳහා මුරපදයක් ඇතුළත් කිරීමට අවශ්‍ය නොවීම හෝ යතුරු මුරපදයක් තිබුණත් ඔබ ඇතුළු වන ඕනෑම දෙයක්. මෙය පුද්ගලික යතුර සහ පොදු යතුර යන දෙකම අවශ්‍ය වේ. ඔවුන් මුහුදු අශ්වයින් සඳහා නම් කිරීමේ සම්මුතියක් අනුගමනය කළ යුතුය. පෙරනිමිය පිළිගත හැකි ය (පුද්ගලික යතුර සඳහා id_rsa සහ පොදු යතුර සඳහා id_rsa.pub ... සැබවින්ම privatekeyname සහ privatekeyname.pub යන ඕනෑම දෙයක් )

පිවිසීමෙන් පසු ස්වයංක්‍රීයව අගුළු ඇරීම සඳහා ඔබට මුහුදු අශ්වයාට යතුර එක් කිරීමට; (ෆෙඩෝරා 25 හි, වෙනත් ඩිස්ට්‍රෝවල ගමන් කරන ස්ථානය බොහෝ දුරට සමාන වුවත් මට විශ්වාස නැත)

/lib64/seahorse/seahorse-ssh-askpass /path/to/keys/here

මට නම් එය එසේ විය

/lib64/seahorse/seahorse-ssh-askpass ~/.ssh/id_rsa

(මගේ නඩුවේ පොදු යතුර id_rsa.pub බව මුහුදු අශ්වයා ස්වයංක්‍රීයව උපකල්පනය කරයි)

විධානය ක්‍රියාත්මක කිරීමෙන් පසු, පුද්ගලික යතුර සඳහා මුරපදය ඇතුළත් කිරීම සඳහා මුහුදු අශ්වයා හුරුබුහුටි කුඩා gtk මුරපද ක්ෂේත්‍රයක් විවෘත කරනු ඇත. මුරපදයකින් තොරව යතුර ජනනය කළේ නම් එය හිස්ව තබන්න.

සෑම දෙයක්ම හොඳින් සිදුවුවහොත් මුහුදු අශ්වයන් ඔබෙන් විමසන්නේ නැත. ඉලක්කගත යන්ත්‍රයට කඩා වැදීමට ඔබට උත්සාහ කිරීමට අවශ්‍ය වනු ඇත. එවිට මුරපදයක් සමඟ යතුර අගුළු ඇරීමට මුහුදු අශ්වයා ඔබෙන් විමසනු ඇත (මෙය එක් වරක් පමණක් සිදුවනු ඇත) නමුත් මේ වතාවේ එය ටිකක් වෙනස් විය යුතුය; ), සහ විකල්පය ඉදිරිපත් කරන්න පිවිසුම් මත ප්රධාන විවෘත කර ගැනීමට, ඔබ ඔබේ අරමුණු සාක්ෂාත් කර ගැනීම සඳහා මෙම විකල්පය පරීක්ෂා කළ යුතුය.

මම සියලු පිළිතුරු කියවා නැති නිසා, මෙම පිළිතුර උත්සාහ කිරීමට පෙර ssh-add සමඟ කළ යුතු යැයි සියලු දෙනා ඔබට පැවසූ දේ අහෝසි කිරීමට මම නිර්දේශ කරමි. වෙනත් ආකාරයකින් එසේ කිරීමෙන් ඔබගේ යතුරු වලට නරක දෙයක් සිදුවිය හැකිය, idk.


0

මෙන්න නිශ්චිත පිටපත.

AS PASSW යාවත්කාලීන කරන්න, ඉන්පසු එය ඔබේ පර්යන්තයේ පිටපත් කරන්න

# <sshpass> via typinator
# Updated: 2017-01-18_21h36
#
# apt-get update -y; apt-get install expect -qy

# Pass this value to ssh-add
PASSW="myfancypass123"

# Define a name for this script
THIS_SCRIPT="$(date +%Y-%m-%d_%H-%M-%S-%N)".sh

# Create a fresh directory to work from / Clean up
rm -rf ~/temp; mkdir -p ~/temp; cd ~/temp; ls -la


# Output our bash script file - BEGIN
cat <<< '
#!/bin/bash

set -u     # Stop if an unbound variable is referenced
set -e     # Stop on first error
export HISTIGNORE="expect*";

# Normal CMDs
echo && echo "The process should take about 10 seconds:" && echo
eval "$(ssh-agent -s)"; sleep 0.5;

# Define VAR passed when this bash-script was launched
password="$@"

# Launch the expect magic
expect -c "
    spawn ssh-add /root/.ssh/id_rsa
    expect "?assword:"
    send \"$password\r\"
    expect "?password:"
    send \"$password\r\"
    expect eof"

export HISTIGNORE="";
export password="";
' > $THIS_SCRIPT
# Output our bash script file - END


# Ensure we are in the right path
cd ~/temp; ls -la; sleep 1;

# Run the bash script
chmod +x ./$THIS_SCRIPT; ./$THIS_SCRIPT "$PASSW"; unset password;

# Clean up
rm -rf ~/temp; mkdir -p ~/temp; cd ~/temp; ls -la

0

මා දන්නා හොඳම ක්‍රමය නම්, පෙර ප්‍රශ්නයට අනුවර්තනය කරන ලද PAM පිවිසුම් පිටපතක් භාවිතා කිරීමයි.

ඔබගේ මුරපදය ඔබේ පද්ධතියේ මුරපදය හා බර ව්‍යුත්පන්න ශ්‍රිතයක් සමඟ සංකේතනය කර ඇත. ප්‍රවේශවීමේදී, ඔබේ මුරපදය විකේතනය කර එය නියෝජිතයාට එක් කිරීමට ඔබේ පද්ධති මුරපදය භාවිතා කරයි.

https://github.com/capocasa/systemd-user-pam-ssh

ඉදිරිපත් කර ඇති අනෙක් සෑම විසඳුමකටම වඩා වාසිය නම්, එය ශුන්‍ය උත්සාහයකින් යුතුව ssh-add අතින් ආරම්භ කිරීමට සමාන ආරක්‍ෂාව ඒකාබද්ධ කිරීමයි. එයට අමතර මෙවලම් අවශ්‍ය නොවන අතර බොහෝ පද්ධතිවල (OpenSSL) පෙරනිමියෙන් දැනටමත් ස්ථාපනය කර ඇති එක් අතිරේක පරායත්තතාවයක් ඇත.


0

මැකෝස් හි මගේ සැකසුම පහත පරිදි වේ (ඇතුළත .zshrcහෝ .bash_profileබැෂ් මිනිසුන් සඳහා):

# Kill then Load the ssh-agent and set the necessary env variables it outputs
sshRestart() {
    # if all else fails
    # pkill -u $(whoami) ssh-agent;

    if [ -n "$SSH_AUTH_SOCK" ] ; then
        eval `/usr/bin/ssh-agent -k`
    fi
    eval `ssh-agent -s`
    ssh-add ~/.ssh/YOUR_KEY_FILE
    echo "Restarted SSH agent"
}

if [ -z "$SSH_AUTH_SOCK" ] || [[ $SSH_AUTH_SOCK == *"/private/tmp/"* ]] ; then
    eval `ssh-agent -s` > /dev/null 2>&1
    ssh-add ~/.ssh/YOUR_KEY_FILE > /dev/null 2>&1
fi

මෙම || [[ $SSH_AUTH_SOCK == *"/private/tmp/"* ]]පෙරනිමි අගය නිසා කොටසක් macOS මත අවශ්ය වන්නේ /private/tmp/com.apple.launchd.SOMETHINGHERE/Listeners. එසේ නොමැති නම් - තෝමස් නයිමන්ගේ සවිස්තරාත්මක පිළිතුර අසමත් නිසා$SSH_AUTH_SOCK වන්නේ සෑම විටම යම් දෙයකට සකසා ඇති බැවිනි.

ඉන්පසු .zlogout(හෝ .bash_logoutබැෂ් මිනිසුන් සඳහා):

if [ -n "$SSH_AUTH_SOCK" ] ; then
    eval `/usr/bin/ssh-agent -k`
fi

මැකෝස් මොජාවේ 10.14.5 හි පරීක්ෂා කර ඇත

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.