বিপরীত সুড়ঙ্গ তৈরি করতে স্থায়ী পটভূমি ssh সংযোগ: সঠিক উপায় কি?


41

সম্পর্কিত প্রশ্ন: সার্ভার থেকে ক্লায়েন্টে ssh সংযোগ শুরু করুন

সেখান থেকে উত্তর আমাকে অনেক সাহায্য করেছে, এই আদেশটি আমার যা প্রয়োজন তা করে:

ssh -R 2225:localhost:22 loginOfServerWithPublicIP@publicIP

তাই আমি স্ক্রিপ্টটি সব সময় পুনরায় সংযোগ করতে লিখেছিলাম:

 #!/bin/bash

 while true; do
    echo "try to connect..."
    ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host
    echo "restarting in 5 seconds.."
    sleep 5
 done

এবং এটি যোগ /etc/crontab। তবে আমি খুঁজে পেয়েছি যে কেবল যদি আমি এটি শেল থেকে "হাতে" চালিত করি তবে এটি কাজ করে তবে যদি এটি ক্রোন দ্বারা ডাকা হয়, ssh সংযোগ করে এবং অবিলম্বে শেষ হয়। (সুতরাং, উপরের স্ক্রিপ্টটি সর্বদা পুনরুদ্ধার করে)

থেকে man ssh, আমি খুঁজে পেয়েছি যে ব্যাকগ্রাউন্ড সংযোগের জন্য আমি এটিকে -nকী দিয়ে কল করা উচিত , তবে এটি কোনও লাভ হয়নি। তারপরে, আমি কেবল একই স্ক্রিপ্টগুলির চারপাশে সন্ধান করলাম এবং আমি দেখতে পেলাম যে আমি কল করলে এটি কাজ করে tail -f something, অর্থাত্ কিছু "নেভারেন্ডেন্ডিং" কমান্ড, সুতরাং আমি খালি ফাইল তৈরি করেছি /tmp/dummy_fileএবং এখন আমার এসএসএস কমান্ডটি এরকম দেখাচ্ছে:

ssh -o ServerAliveInterval=240 -R 2225:localhost:22 -n user@host tail -f /tmp/dummy_file

এটা এখন কাজ করে! তবে, এই সমাধানটি খানিকটা কুৎসিত বলে মনে হচ্ছে, তবুও আমি সত্যিই সেই আচরণের প্রকৃত কারণগুলি বুঝতে পারি না। কেবল সুযোগেই , আমি bashপরিবর্তে কল করার চেষ্টা করেছি tail -f( bashআমার কাছে "নেভারেন্ডেন্ডিং" কমান্ডও মনে হয়), তবে এটি কার্যকর হয় না।

সুতরাং, কেউ দয়া করে এই আচরণটি ব্যাখ্যা করতে পারেন, এবং বিপরীত এসএসএস টানেলটি ধরে রাখার জন্য ব্যাকগ্রাউন্ড এসএসএস সংযোগ তৈরি করার সঠিক উপায় কী?


&আপনার ssh কমান্ডের শেষে কী ব্যবহার করবেন :ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host &
নেটওয়ার্কার

কিন্তু তারপরে আমার whileলুপটি বার বার চলবে, sshপ্রতি 5 সেকেন্ডে নতুন ব্যাকগ্রাউন্ড সংযোগ শুরু করে, তাই না? এটি আমার যা প্রয়োজন তা নয়।
দিমিত্রি ফ্র্যাঙ্ক

উত্তর:


37

মনে হচ্ছে আপনি -Nssh করার বিকল্পটি চান ।

 -N      Do not execute a remote command.  This is useful for just forwarding ports
         (protocol version 2 only).

16

আমি দৃ strongly়ভাবে আপনি বিবেচনা পরামর্শ দিতে হবে autossh। এটিতে কিছু নির্দিষ্ট তাত্পর্য রয়েছে যা সংযোগ ক্ষতি হ'ল অন্তর্নিহিত কারণ কিনা তা নির্ধারণ করার অনুমতি দেবে এবং পুনরায় সংযোগের প্রচেষ্টাটির ফ্রিকোয়েন্সি কমিয়ে দেবে। এছাড়াও এটি অতিরিক্ত টানেল ব্যবহার করে সংযোগটি নিরীক্ষণ করে, যা আপনাকে জিজ্ঞাসা করার মতো পরিস্থিতিতে এটির জন্য অত্যন্ত দরকারী।

উদাহরণস্বরূপ, আপনি যদি autossh upstartউবুন্টুতে থাকেন তবে উবুন্টুকে কীভাবে কনফিগার করতে হবে তার জন্য কিছু দরকারী উদাহরণ খুঁজতে আপনি একটি ওয়েব অনুসন্ধান করতে পারেন যাতে সুড়ঙ্গটি একটি অবিচ্ছিন্ন ফ্যাশনে রাখা যায়।

আমি নির্দিষ্ট সার্ভিসের জন্য আমার সার্ভারে একটি টানেলযুক্ত সংযোগটি সর্বদা উন্মুক্ত রাখতে এটি ব্যবহার করছি।


আমি আসলে চেষ্টা autosshকরেছি, আমি এই নিবন্ধটি পড়েছি: goo.gl/jVuuSR , তবে এটি কেবল তখনই আমার পক্ষে কাজ করে যদি আমার সাথে সিস্টেম বুটে ইন্টারনেট সংযোগ থাকে; তবে যদি সংযোগটি পরে প্রতিষ্ঠিত হয় তবে এটি কার্যকর হয়নি। নিশ্চিত নয়, হতে পারে আমি কিছু ভুল করেছি, তবে এমনকি এই নিবন্ধটিতে লেখক sleep 10তার কাছে লিখেছেন /etc/rc.local, অটোশ যখন ডাকা হয় তখন ইন্টারনেট সংযোগটি ইতিমধ্যে প্রস্তুত রয়েছে কিনা তা নিশ্চিত হওয়ার জন্য।
দিমিত্রি ফ্রাঙ্ক

2
@ দিমিত্রিফ্রঙ্ক: আপনি যদি চেষ্টা করে থাকেন তবে আপনার প্রশ্নের মধ্যে এটি উল্লেখ না করার জন্য একধরণের অন্যায্য। আমি এখনও এটি সুপারিশ। সঙ্গে upstartএবং অন্যান্য Init প্রতিস্থাপন আপনি আপ হচ্ছে এক বা একাধিক নেটওয়ার্ক ডিভাইসের জন্য সুড়ঙ্গ শুরুর গিঁট পারবেন না। ওয়েবে সবচেয়ে ভাল সমাধান (আইএমও) হ'ল এটি: erik.torgesta.com/tag/ssh-upstart ... এবং sleep 10কোনওভাবেই কোনও প্রান্তের ক্ষেত্রে কোনও জিনিসকে সহায়তা করবে না।
0xC0000022L

আমি এটি উল্লেখ না করার জন্য দুঃখিত, সত্য কথা বলতে যখন এটি আমার পক্ষে কাজ করে না আমি ঠিক "হাতে" তা করার সিদ্ধান্ত নিয়েছিলাম এবং অটোশ সম্পর্কে সম্পূর্ণরূপে ভুলে গেছি। জন্য ধন্যবাদ ssh-upstart, আমি এটি একবার দেখুন!
দিমিত্রি ফ্র্যাঙ্ক

পার্টিতে দেরি হলেও আমি যুক্ত করতে চেয়েছিলাম একটি বিপরীত সুড়ঙ্গ বজায় রাখার জন্য আমি নির্ভরযোগ্যভাবে অটোশ পেতে পারি না। যদি কোনও কারণে বিপরীত টানেল ব্যর্থ হয় তবে অটোশ খেয়াল করবে না এবং সংযোগটি পুনরায় তৈরি করতে চাইবে না। আমার একাধিক সার্ভার থেকে একাধিক টানেল প্রয়োজন এবং এটি বিষয়গুলিকে জটিল করে
বিকাশকারী

@ ডেভেলপারক্রিস: ঠিক আছে, আমি ঠিক এই দৃশ্যে - এবং নির্ভরযোগ্যভাবে চালিয়ে যাচ্ছি। রিমোট সার্ভারটি আক্ষরিকভাবে না নেমে গেলে এবং আপনার এটি আবার স্যুইচ করা দরকার, টানেলটি সর্বদা পুনরায় পুনঃপ্রকাশিত হয়। সম্ভবত আপনার নিজের প্রশ্ন লিখতে হবে এবং বিশদ সরবরাহ করা উচিত। অবশ্যই এটি করা যেতে পারে। আমি কয়েক মাস ধরে ভিপিএন সমস্যার আশেপাশে কাজ করতে এটি ব্যবহার করেছি।
0xC0000022L

9

আমি @ 0xC0000022L এর পরামর্শটি এবং দ্বিতীয়টি ব্যবহার করব autossh। আমি আমার ল্যাপটপ থেকে অন্য স্থানে এসএসএইচ সংযোগ বজায় রাখতে এটি ব্যবহার করি কারণ আমি এটি স্থান থেকে অন্য জায়গায় নিয়ে যাচ্ছি এবং এটি ঠিক কাজ করে। আমি আমার ব্যক্তিগত এসএমটিপি এবং আইএমএপি সার্ভারগুলিতে অ্যাক্সেসের জন্য 25 এবং 2143 বন্দরগুলি সুড়ঙ্গ করতে এই সংযোগটি ব্যবহার করি।

আমি যে স্ক্রিপ্টটি ব্যবহার করি তা এখানে:

$ more /home/saml/bin/autossh_mail.sh
#!/bin/bash

autossh -M 0 -f -N -L 2025:localhost:25 -L 2143:localhost:143 sam@imap-o

আমি তার পরে হোস্টের জন্য Hostআমার $HOME/.ssh/configফাইলে একটি এন্ট্রি বজায় রাখি imap-o

$ more $HOME/.ssh/config
ServerAliveInterval 15
ForwardX11 yes
ForwardAgent yes
ForwardX11Trusted yes

GatewayPorts yes

Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
IdentityFile ~/.ssh/id_dsa

Host imap-o
    User sam
    ProxyCommand ssh sam@mygw.mydom.com nc `echo %h|sed 's/-o//'` %p

autossh_mail.shস্ক্রিপ্ট আমার ডেস্কটপ যখন আমি লগ ইন করুন অংশ হিসেবে চালানো হয়। আপনি মাধ্যমে এটি অ্যাক্সেস করতে পারেন gnome-session-properties

       এসএস # 1

                                          এসএস # 2

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.