{"id":2117,"date":"2024-01-10T01:00:00","date_gmt":"2024-01-09T19:30:00","guid":{"rendered":"https:\/\/zmainframes.com\/zlog\/?p=2117"},"modified":"2024-01-07T19:50:48","modified_gmt":"2024-01-07T14:20:48","slug":"bridging-the-divide-setting-up-secure-ssh-connections-for-mainframe-github-gitlab-integration","status":"publish","type":"post","link":"https:\/\/zmainframes.com\/zlog\/bridging-the-divide-setting-up-secure-ssh-connections-for-mainframe-github-gitlab-integration\/","title":{"rendered":"Bridging the Divide: Setting Up Secure SSH Connections for Mainframe-GitHub\/GitLab Integration"},"content":{"rendered":"\r\n<h2 class=\"wp-block-heading has-text-align-center\">SSH Connection Setup for GitHub and GitLab Integration with Mainframes<\/h2>\r\n\r\n\r\n\r\n<p>The venerable mainframe, once synonymous with monolithic applications and glacial development cycles, is experiencing a renaissance. This shift is fueled by the embrace of modern DevOps practices, propelling the mainframe into the vibrant realm of continuous integration, continuous delivery (CI\/CD), and collaborative development. But bridging the gap between the mainframe and popular distributed version control systems (DVCS) like GitHub and GitLab can feel like traversing a chasm. Fear not, intrepid developers! Secure SSH connections come to the rescue, paving the way for seamless integration and unleashing the power of DevOps workflows for your mainframe projects.<\/p>\r\n\r\n\r\n\r\n<p>This guide serves as your trusty map, navigating you through the intricacies of establishing secure SSH connections between your mainframe and GitHub\/GitLab. We&#8217;ll equip you with the knowledge and practical steps to confidently bridge the divide, transforming your mainframe from a solitary island into a thriving hub of collaborative development.<\/p>\r\n\r\n\r\n\r\n<p><strong>Why SSH for Mainframe-GitHub\/GitLab Integration?<\/strong><\/p>\r\n\r\n\r\n\r\n<p>While protocols like HTTP\/HTTPS offer basic connectivity, SSH (Secure Shell) reigns supreme for its robust security features. Imagine it as a fortified tunnel, encrypting all communication between your mainframe and GitHub\/GitLab, shielding sensitive data like commit histories and credentials from prying eyes. Beyond its impenetrable armor, SSH provides:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Authentication:<\/strong>\u00a0Employ strong login mechanisms like password authentication or public-key cryptography to ensure only authorized users access your precious codebase.<\/li>\r\n\r\n\r\n\r\n<li><strong>Flexibility:<\/strong>\u00a0SSH acts as a versatile Swiss Army knife, empowering you to run commands, transfer files, and automate tasks, essential for scripting CI\/CD pipelines.<\/li>\r\n\r\n\r\n\r\n<li><strong>Granular Control:<\/strong>\u00a0Define who can do what with access control configurations, ensuring your codebase remains safe from accidental or malicious modifications.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p><strong>Generating SSH Keys: Your Digital Passports<\/strong><\/p>\r\n\r\n\r\n\r\n<p>The foundation of secure connections lies in generating and managing SSH key pairs. Think of these as digital passports, granting access to your Git repository:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Private Key:<\/strong>\u00a0This confidential key resides on your mainframe, acting like a hidden signature, authenticating your identity. Keep it under lock and key, preferably secured with a strong passphrase.<\/li>\r\n\r\n\r\n\r\n<li><strong>Public Key:<\/strong>\u00a0This public key, akin to a shared visa, is uploaded to GitHub\/GitLab, allowing your mainframe to connect without requiring a password.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p><strong>Commanding the Keys: Tools for Different Realms<\/strong><\/p>\r\n\r\n\r\n\r\n<p>The battlefield for generating these keys depends on your chosen weaponry:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>On your mainframe:<\/strong>\u00a0Utilize powerful tools like BPlex&#8217;s\u00a0<code>bpkey<\/code>\u00a0command or ISPF templates to forge your digital passports.<\/li>\r\n\r\n\r\n\r\n<li><strong>On your local machine (OpenSSH):<\/strong>\u00a0For those venturing into the realm of OpenSSH, unleash the\u00a0<code>ssh-keygen<\/code>\u00a0command to craft your key pair within the familiar confines of your local terminal.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p><strong>Example: Forging Your Credentials with BPlex (Mainframe)<\/strong><\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" style=\"font-size: .875rem; font-family: Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; --cbp-line-number-color: #adbac7; --cbp-line-number-width: calc(1 * 0.6 * .875rem); line-height: 1.25rem; --cbp-tab-width: 2; tab-size: var(--cbp-tab-width, 2);\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\"><span style=\"display: flex; align-items: center; padding: 10px 0px 10px 16px; margin-bottom: -2px; width: 100%; text-align: left; background-color: #2d333d; color: #9eadbd;\">Imba<\/span>\r\n<pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6cb6ff;\">ISPFTEMPLATE<\/span> <span style=\"color: #6cb6ff;\">ISPFKEY<\/span><\/span>\r\n<span class=\"line\">   <span style=\"color: #6cb6ff;\">EXEC<\/span> <span style=\"color: #6cb6ff;\">CMD<\/span><span style=\"color: #adbac7;\">(<\/span><span style=\"color: #96d0ff;\">'BPKEY -P 4096'<\/span><span style=\"color: #adbac7;\">)<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #6cb6ff;\">ENDISPFTEMPLATE<\/span><\/span>\r\n\r\n<span class=\"line\"><span style=\"color: #6cb6ff;\">RUN<\/span> <span style=\"color: #6cb6ff;\">ISPFKEY<\/span><\/span>\r\n\r\n<span class=\"line\"><span style=\"color: #adbac7;\">bpkey <\/span><span style=\"color: #f47067;\">-<\/span><span style=\"color: #adbac7;\">pubout &lt;<\/span><span style=\"color: #8ddb8c;\">private_key_file<\/span><span style=\"color: #adbac7;\">&gt; <\/span><span style=\"color: #f47067;\">&gt;<\/span><span style=\"color: #adbac7;\"> public_key.txt<\/span><\/span>\r\n<\/code><\/pre>\r\n<\/div>\r\n\r\n\r\n\r\n<p>This ISPF template invokes the <code>bpkey<\/code> command to generate a key pair and extracts the public key for upload to GitHub\/GitLab.<\/p>\r\n\r\n\r\n\r\n<p><strong>Example: Crafting Your Keys with OpenSSH (Local Machine)<\/strong><\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" style=\"font-size: .875rem; font-family: Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; --cbp-line-number-color: #adbac7; --cbp-line-number-width: calc(1 * 0.6 * .875rem); line-height: 1.25rem; --cbp-tab-width: 2; tab-size: var(--cbp-tab-width, 2);\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\"><span style=\"display: flex; align-items: center; padding: 10px 0px 10px 16px; margin-bottom: -2px; width: 100%; text-align: left; background-color: #2d333d; color: #9eadbd;\">SSH Config<\/span>\r\n<pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #adbac7;\">ssh-keygen -t rsa -b <\/span><span style=\"color: #6cb6ff;\">4096<\/span><span style=\"color: #adbac7;\"> -<\/span><span style=\"color: #6cb6ff;\">N<\/span><span style=\"color: #adbac7;\"> \"\" -f ~\/.ssh\/id_rsa<\/span><\/span>\r\n<\/code><\/pre>\r\n<\/div>\r\n\r\n\r\n\r\n<p>This command generates a key pair within the <code>~\/.ssh<\/code> directory of your local machine, securing your private key with a passphrase.<\/p>\r\n\r\n\r\n\r\n<p><strong>Uploading the Public Key: Granting Access to Your Git Fortress<\/strong><\/p>\r\n\r\n\r\n\r\n<p>With your public key forged, it&#8217;s time to grant your mainframe access to your Git repository. Navigate to your user settings on GitHub\/GitLab and locate the &#8220;SSH and GPG keys&#8221; section. Paste the contents of your public key file (e.g., <code>public_key.txt<\/code>) and give it a descriptive title. Now, your mainframe has the green light to enter the Git fortress.<\/p>\r\n\r\n\r\n\r\n<p><strong>Connecting to GitHub\/GitLab: The Bridge Opens<\/strong><\/p>\r\n\r\n\r\n\r\n<p>With your digital credentials in place, let&#8217;s build the bridge! Tools like zSecure Secure Shell, OpenSSH with additional configurations, and custom scripts offer powerful avenues for connection.<\/p>\r\n\r\n\r\n\r\n<p><strong>Example: Crossing the Divide with zSecure Secure Shell (Mainframe)<\/strong><\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" style=\"font-size: .875rem; font-family: Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; --cbp-line-number-color: #adbac7; --cbp-line-number-width: calc(1 * 0.6 * .875rem); line-height: 1.25rem; --cbp-tab-width: 2; tab-size: var(--cbp-tab-width, 2);\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\"><span style=\"display: flex; align-items: center; padding: 10px 0px 10px 16px; margin-bottom: -2px; width: 100%; text-align: left; background-color: #2d333d; color: #9eadbd;\">SSH Config<\/span>\r\n<pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #adbac7;\">zsecure sh my-github-server.com -l mainframe_user<\/span><\/span>\r\n\r\n<span class=\"line\"><span style=\"color: #768390;\"># Enter passphrase for your private key<\/span><\/span>\r\n\r\n<span class=\"line\"><span style=\"color: #768390;\"># Run commands on GitHub\/GitLab remotely...<\/span><\/span>\r\n<\/code><\/pre>\r\n<\/div>\r\n\r\n\r\n\r\n<p>This command establishes a secure connection to your Git repository using zSecure Secure Shell, prompting you for your private key passphrase before granting access.<\/p>\r\n\r\n\r\n\r\n<p><strong>Beyond Basic Connections: The DevOps Revolution Arrives<\/strong><\/p>\r\n\r\n\r\n\r\n<p>The power of SSH transcends mere connections. You can leverage it for advanced DevOps tasks like:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Automated CI\/CD Pipelines:<\/strong>\u00a0Imagine your code seamlessly triggering builds,\u00a0tests,\u00a0and deployments on GitHub\/GitLab the moment it touches your mainframe repository.\u00a0SSH bridges the gap,\u00a0enabling automated workflows that accelerate application delivery like never before.<\/li>\r\n\r\n\r\n\r\n<li><strong>Jenkins Orchestration:<\/strong>\u00a0Integrate Jenkins,\u00a0a popular CI\/CD tool,\u00a0with your SSH connection to orchestrate automated builds and testing on your mainframe.\u00a0Jenkins pulls code changes from your Git repository,\u00a0triggers builds using SSH commands,\u00a0and executes pre-defined tests,\u00a0ensuring quality and stability before deployment.<\/li>\r\n\r\n\r\n\r\n<li><strong>Remote Script Execution:<\/strong>\u00a0Unleash the power of automation!\u00a0Run custom scripts and utilities directly from GitHub\/GitLab actions on your mainframe via SSH.\u00a0Imagine data migration scripts,\u00a0configuration management tools,\u00a0or even automated security scans,\u00a0all orchestrated remotely through secure connections.<\/li>\r\n\r\n\r\n\r\n<li><strong>Enhanced Collaboration and Visibility:<\/strong>\u00a0Centralize your code in GitHub\/GitLab,\u00a0breaking down the silos between mainframe and non-mainframe developers.\u00a0Version history,\u00a0branching,\u00a0and merge requests provide comprehensive visibility into code changes,\u00a0fostering clearer communication and better understanding across teams.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p><strong>Examples in Action: Putting Theory into Practice<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Let&#8217;s delve deeper into concrete examples:<\/p>\r\n\r\n\r\n\r\n<p><strong>1. Triggering a z\/OS Build from GitHub Actions:<\/strong><\/p>\r\n\r\n\r\n\r\n<p>YAML<\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" style=\"font-size: .875rem; font-family: Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; --cbp-line-number-color: #adbac7; --cbp-line-number-width: calc(2 * 0.6 * .875rem); line-height: 1.25rem; --cbp-tab-width: 2; tab-size: var(--cbp-tab-width, 2);\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\"><span style=\"display: flex; align-items: center; padding: 10px 0px 10px 16px; margin-bottom: -2px; width: 100%; text-align: left; background-color: #2d333d; color: #9eadbd;\">YAML<\/span>\r\n<pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #8ddb8c;\">jobs<\/span><span style=\"color: #adbac7;\">:<\/span><\/span>\r\n<span class=\"line\">  <span style=\"color: #8ddb8c;\">build<\/span><span style=\"color: #adbac7;\">:<\/span><\/span>\r\n<span class=\"line\">    <span style=\"color: #8ddb8c;\">runs-on<\/span><span style=\"color: #adbac7;\">: <\/span><span style=\"color: #96d0ff;\">ubuntu-latest<\/span><\/span>\r\n<span class=\"line\">    <span style=\"color: #8ddb8c;\">steps<\/span><span style=\"color: #adbac7;\">:<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #adbac7;\">      - <\/span><span style=\"color: #8ddb8c;\">uses<\/span><span style=\"color: #adbac7;\">: <\/span><span style=\"color: #96d0ff;\">actions\/checkout@v3<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #adbac7;\">      - <\/span><span style=\"color: #8ddb8c;\">name<\/span><span style=\"color: #adbac7;\">: <\/span><span style=\"color: #96d0ff;\">Setup SSH connection<\/span><\/span>\r\n<span class=\"line\">        <span style=\"color: #8ddb8c;\">run<\/span><span style=\"color: #adbac7;\">: <\/span><span style=\"color: #f47067;\">|<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #96d0ff;\">          ssh-keygen -t rsa -b 4096 -N \"\" -f $HOME\/.ssh\/id_rsa<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #96d0ff;\">          # Upload public key to GitHub<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #96d0ff;\">          cat $HOME\/.ssh\/id_rsa.pub &gt; key.pub<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #96d0ff;\">          git config user.email \"your_email@example.com\"<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #96d0ff;\">          git config user.name \"your_username\"<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #96d0ff;\">          git add key.pub<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #96d0ff;\">          git commit -m \"Add SSH public key\"<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #96d0ff;\">          git push origin HEAD<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #adbac7;\">       - <\/span><span style=\"color: #8ddb8c;\">name<\/span><span style=\"color: #adbac7;\">: <\/span><span style=\"color: #96d0ff;\">Trigger z\/OS build<\/span><\/span>\r\n<span class=\"line\">         <span style=\"color: #8ddb8c;\">run<\/span><span style=\"color: #adbac7;\">: <\/span><span style=\"color: #f47067;\">|<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #96d0ff;\">           ssh mainframe_user@zOS_server -p 22 &lt;&lt;EOF<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #96d0ff;\">             cd \/your\/project\/directory<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #96d0ff;\">             .\/build_script.sh<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #96d0ff;\">           EOF<\/span><\/span>\r\n<\/code><\/pre>\r\n<\/div>\r\n\r\n\r\n\r\n<p>Use code with caution.\u00a0<a href=\"https:\/\/bard.google.com\/faq#coding\" target=\"_blank\" rel=\"noreferrer noopener\">Learn more<\/a>content_copy<\/p>\r\n\r\n\r\n\r\n<p>This workflow generates an SSH key pair, uploads the public key to GitHub, and then connects to the z\/OS server via SSH to execute the <code class=\"\">build_script.sh<\/code>, triggering the build process automatically.<\/p>\r\n\r\n\r\n\r\n<p><strong>2. Running Data Migration Script from GitLab:<\/strong><\/p>\r\n\r\n\r\n\r\n<p>YAML<\/p>\r\n\r\n\r\n\r\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" style=\"font-size: .875rem; font-family: Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; --cbp-line-number-color: #adbac7; --cbp-line-number-width: calc(2 * 0.6 * .875rem); line-height: 1.25rem; --cbp-tab-width: 2; tab-size: var(--cbp-tab-width, 2);\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\"><span style=\"display: flex; align-items: center; padding: 10px 0px 10px 16px; margin-bottom: -2px; width: 100%; text-align: left; background-color: #2d333d; color: #9eadbd;\">YAML<\/span>\r\n<pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e;\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #8ddb8c;\">stages<\/span><span style=\"color: #adbac7;\">:<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #adbac7;\">  - <\/span><span style=\"color: #96d0ff;\">migrate<\/span><\/span>\r\n\r\n<span class=\"line\"><span style=\"color: #8ddb8c;\">migrate<\/span><span style=\"color: #adbac7;\">:<\/span><\/span>\r\n<span class=\"line\">  <span style=\"color: #8ddb8c;\">script<\/span><span style=\"color: #adbac7;\">:<\/span><\/span>\r\n<span class=\"line\"><span style=\"color: #adbac7;\">    - <\/span><span style=\"color: #96d0ff;\">ssh-agent sh -c '<\/span><\/span>\r\n<span class=\"line\">         <span style=\"color: #96d0ff;\">ssh-add $HOME\/.ssh\/id_rsa;<\/span><\/span>\r\n<span class=\"line\">         <span style=\"color: #96d0ff;\">cd \/data\/migration\/scripts;<\/span><\/span>\r\n<span class=\"line\">         <span style=\"color: #96d0ff;\">.\/migrate_data.sh'<\/span><\/span>\r\n<\/code><\/pre>\r\n<\/div>\r\n\r\n\r\n\r\n<p>Use code with caution.\u00a0<a href=\"https:\/\/bard.google.com\/faq#coding\" target=\"_blank\" rel=\"noreferrer noopener\">Learn more<\/a>content_copy<\/p>\r\n\r\n\r\n\r\n<p>This pipeline utilizes a pre-existing SSH key stored in <code class=\"\">$HOME\/.ssh\/id_rsa<\/code> to connect to the mainframe and execute the <code class=\"\">migrate_data.sh<\/code> script directly from GitLab, automating the data migration process.<\/p>\r\n\r\n\r\n\r\n<p><strong>Remember:<\/strong> These are just examples, and your specific workflow configuration will depend on your chosen tools, scripts, and build environments.<\/p>\r\n\r\n\r\n\r\n<p><strong>Taming the Complexity: A Secure Journey<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Embracing SSH connections for Git integration opens exciting possibilities, but complexity and potential risks deserve attention:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li><strong>Security Vigilance:<\/strong>\u00a0Implement robust security practices like strong passwords,\u00a0key management,\u00a0and access control to ensure secure connections and prevent unauthorized access.<\/li>\r\n\r\n\r\n\r\n<li><strong>Audit Logs and Monitoring:<\/strong>\u00a0Regularly monitor SSH activity and audit logs to identify any suspicious behavior or malicious attempts.<\/li>\r\n\r\n\r\n\r\n<li><strong>Documentation and Training:<\/strong>\u00a0Provide clear documentation and training for developers on securely using SSH connections and adhering to best practices.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\n<p>&nbsp;<\/p>\n\r\n\r\n\r\n<p><strong>A Bright Future for Mainframe DevOps:<\/strong><\/p>\r\n\r\n\r\n\r\n<p>By embracing secure SSH connections and integrating with platforms like GitHub and GitLab, we are rewriting the narrative of mainframe development. This fusion of modern practices with the stability and power of the mainframe unlocks an unprecedented level of agility, collaboration, and innovation. So, take the leap, secure your connections, and let your mainframe join the DevOps revolution!<\/p>\r\n\r\n\r\n\r\n<p><strong>Additional Resources:<\/strong><\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>zSecure Secure Shell:\u00a0<a href=\"https:\/\/www.ibm.com\/zsecure\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.ibm.com\/zsecure<\/a>:\u00a0<a href=\"https:\/\/www.ibm.com\/zsecure\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.ibm.com\/zsecure<\/a><\/li>\r\n\r\n\r\n\r\n<li>GitHub SSH Keys:\u00a0<a href=\"https:\/\/docs.github.com\/en\/authentication\/connecting-to-github-with-ssh\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/docs.github.com\/en\/authentication\/connecting-to-github-with-ssh<\/a>:\u00a0<a href=\"https:\/\/docs.github.com\/en\/authentication\/connecting-to-github-with-ssh\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/docs.github.com\/en\/authentication\/connecting-to-github-with-ssh<\/a><\/li>\r\n\r\n\r\n\r\n<li>GitLab SSH Keys:\u00a0[<a href=\"https:\/\/docs.gitlab.com\/ee\/user\/ssh.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/docs.gitlab.com\/ee\/user\/ssh.html<\/a>](<a href=\"https:\/\/docs.gitlab.com\/ee\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/docs.gitlab.com\/ee\/<\/a><\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Sources<\/h4>\r\n\r\n\r\n\r\n<p><a href=\"https:\/\/bard.google.com\/faq#citation\" target=\"_blank\" rel=\"noreferrer noopener\">info<\/a><\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\" id=\"message-content-recitation-list\" start=\"1\">\r\n<li><a href=\"https:\/\/github.com\/AdelinFnk\/portfolio\" target=\"_blank\" rel=\"noreferrer noopener\">github.com\/AdelinFnk\/portfolio<\/a><\/li>\r\n<\/ol>\r\n","protected":false},"excerpt":{"rendered":"<p>SSH Connection Setup for GitHub and GitLab Integration with Mainframes The venerable mainframe, once synonymous with monolithic applications and glacial [&hellip;]<\/p>\n","protected":false},"author":515,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[176],"tags":[1135,1139,1138,1140,1142,1133,1134,1132,1136,1118,1127,1116,1137,1141],"class_list":["post-2117","post","type-post","status-publish","format-standard","hentry","category-devops","tag-automation-and-scripting","tag-ci-cd-pipelines","tag-collaborative-development","tag-devops-for-mainframes","tag-devops-workflow-optimization","tag-github-and-gitlab","tag-jenkins-orchestration","tag-mainframe-git-integration","tag-remote-script-execution","tag-secure-access","tag-security-best-practices","tag-ssh-connection","tag-ssh-key-management","tag-version-control"],"amp_enabled":true,"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"zMainframes","author_link":"https:\/\/zmainframes.com\/zlog\/author\/zmainframes\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/zmainframes.com\/zlog\/devops\/\" rel=\"category tag\">DevOps<\/a>","rttpg_excerpt":"SSH Connection Setup for GitHub and GitLab Integration with Mainframes The venerable mainframe, once synonymous with monolithic applications and glacial [&hellip;]","_links":{"self":[{"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/posts\/2117","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/users\/515"}],"replies":[{"embeddable":true,"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/comments?post=2117"}],"version-history":[{"count":3,"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/posts\/2117\/revisions"}],"predecessor-version":[{"id":2120,"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/posts\/2117\/revisions\/2120"}],"wp:attachment":[{"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/media?parent=2117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/categories?post=2117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zmainframes.com\/zlog\/wp-json\/wp\/v2\/tags?post=2117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}