Ssh -N এর জন্য .ssh / config সম্পর্কিত বিকল্পটি কী option


13

আমি আমার কনফিগার ফাইলে একটি উপনাম স্থাপন করতে চাই যা এই আদেশের মত একই ফলাফল:

ssh -N devdb -L 1234:127.0.0.1:1234

আমার .ssh / কনফিগার এন্ট্রি এর জন্য devdb:

Host devdb
User someuser
HostName the_hostname
LocalForward 1234 127.0.0.1:1234

শেল শুরু না করার জন্য আমি উপরের কনফিগারেশনে কী রেখেছি?


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

উত্তর:


22

সুতরাং ssh.cওপেনএসএসএইচ 7.6 পি 1 এর জন্য আমরা খুঁজে পাই

            case 'N':
                    no_shell_flag = 1;
                    options.request_tty = REQUEST_TTY_NO;

সুতরাং -Nদুটি জিনিস আছে:

  • no_shell_flagশুধুমাত্র দেখা ssh.cএবং শুধুমাত্র জন্য সক্ষম -Wবা -Nবিকল্প, অন্যথায় এটি এর সাথে সম্পর্কিত কিছু যুক্তিবিজ্ঞান ব্লক দেখা ControlPersistএবং মানসিক সুস্থতা পটভূমি কাটাচামচ জড়িত পরীক্ষা করা হচ্ছে। কোনও বিকল্প এটি সরাসরি সেট করতে পারে এমন কোনও উপায় আমি দেখছি না।
  • অনুযায়ী সাথে সঙ্গতিপূর্ণ বিস্তারিত বিকল্প ।readconf.crequest_ttyRequestTTYssh_config(5)

এই পাতাটি (ওপেনএসএসএইচ এবং বাঁধাগুলি পুনর্নির্মাণের ব্যতীত, বা ssh_configসাথে টগল করার বিকল্পের জন্য জিজ্ঞাসা no_shell_flagকরা ...) এর মতো কিছু:

Host devdb
 User someuser
 HostName the_hostname
 LocalForward 1234 127.0.0.1:1234
 RequestTTY no
 RemoteCommand cat

কোন প্রযুক্তিগতভাবে কোনও শেল শুরু করে তবে সেই শেলটি সাথে সাথে নিজেকে catপ্রোগ্রামের সাথে প্রতিস্থাপন করা উচিত যা এরপরে বন্দরটি সামনের দিকে ব্যবহার করার অনুমতি দেয় block catবহনযোগ্য, তবে ইনপুট গ্রাস করবে (যদি থাকে তবে) বা ব্যর্থ হতে পারে (যদি স্ট্যান্ডার্ড ইনপুট বন্ধ থাকে)। আরেকটি বিকল্প হ'ল এমন কিছু চালানো যা কেবল ব্লক করে


1
এটি করার জন্য +1 .ssh/config... ভাল হয়েছে!
ওয়েজবুজু

এই উত্তর নিয়ে দুর্দান্ত গবেষণা! ধন্যবাদ!
মৃদু-হলুদ

আমি পছন্দ RemoteCommand exec sleep infinity
থোমাস

3

সম্পূর্ণরূপে এটি করার আপনার আকাঙ্ক্ষার ভিত্তিতে @ থ্রিগের সঠিক উত্তর রয়েছে .ssh/config

অন্য কোনও টানেল কমান্ড দ্রুত করার জন্য ডিফল্টর সাথে একটি ফাংশন ব্যবহার করার বিষয়টিও বিবেচনা করা যেতে পারে (বিশেষত যদি টানেলটি পরিবর্তিত হয় না তবে কেবল হোস্ট হয়)।


sshn() {
  # set your desired host and port forwarding as default
  # and allow them to be passed in if you should need it

  host="${1:-devdb}"
  port="${2:-1234:127.0.0.1:1234}"

  # now all you have to do is `sshn` and it will connect

  echo "executing ssh -N $host -L $port"
  ssh -N "$host" -L "$port"
}

এখানে এটির ব্যবহারের তিনটি উদাহরণ রয়েছে: কোনও কার্যক্রমে নির্দিষ্ট করা ডিফল্টগুলি ব্যবহার না করে:

$ sshn
executing -N devdb -L 1234:127.0.0.1:1234

টানেল ডিফল্ট সহ, একটি পৃথক হোস্ট চালান:

$ sshn host2
executing ssh -N host2 -L 1234:127.0.0.1:1234

উভয়ই ডিফল্ট সহ, একটি নতুন হোস্ট / টানেলের সম্পূর্ণ এক-অফ চালান:

$ sshn host3 12345:127.0.0.1:12345
executing ssh -N host3 -L 12345:127.0.0.1:12345

0

@ থ্রিগের উত্তরের ভিত্তিতে আরও কার্যকর রিমোট কমান্ড:

Host someHost
Hostname 1.2.3.4
LocalForward 15673 localhost:15672
RequestTTY no
RemoteCommand bash -c 'echo "Listening on port 15673"; read -r -d '' _'

read -r -d '' _ব্যবহারকারী প্রেস পর্যন্ত সংযোগ অবরুদ্ধ করবে control+c

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