<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP</id>
	<title>Qtの基礎 - SCP - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP"/>
	<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;action=history"/>
	<updated>2026-06-05T09:20:05Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;diff=11549&amp;oldid=prev</id>
		<title>Wiki: 文字列「__FORCETOC__」を「{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag…</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;diff=11549&amp;oldid=prev"/>
		<updated>2024-10-14T01:58:26Z</updated>

		<summary type="html">&lt;p&gt;文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag…&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2024年10月14日 (月) 10:58時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l871&quot;&gt;871行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;871行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{#seo:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|image=/resources/assets/MochiuLogo_Single_Blue.png&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__FORCETOC__&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__FORCETOC__&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[カテゴリ:Qt]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[カテゴリ:Qt]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiu_wiki:diff:1.41:old-10431:rev-11549:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;diff=10431&amp;oldid=prev</id>
		<title>Wiki: /* libSSHライブラリを使用したSCPコマンドの使用例 */</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;diff=10431&amp;oldid=prev"/>
		<updated>2024-08-01T19:47:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;libSSHライブラリを使用したSCPコマンドの使用例&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2024年8月2日 (金) 04:47時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l439&quot;&gt;439行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;439行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     ssh_scp_close(scp);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     ssh_scp_close(scp);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     ssh_scp_free(scp);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     ssh_scp_free(scp);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    return 0;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiu_wiki:diff:1.41:old-10422:rev-10431:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;diff=10422&amp;oldid=prev</id>
		<title>Wiki: /* libSSH2ライブラリを使用したSCPコマンドの使用例 */</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;diff=10422&amp;oldid=prev"/>
		<updated>2024-08-01T02:35:55Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;libSSH2ライブラリを使用したSCPコマンドの使用例&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2024年8月1日 (木) 11:35時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l444&quot;&gt;444行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;444行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== libSSH2ライブラリを使用したSCPコマンドの使用例 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== libSSH2ライブラリを使用したSCPコマンドの使用例 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;==== ブロッキングモード ====&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;以下の例では、リモート側のPCにSSH接続して、SCPでファイルを送信している。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;以下の例では、リモート側のPCにSSH接続して、SCPでファイルを送信している。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;以下の例は、&amp;lt;u&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ノンブロッキングモード&lt;/del&gt;&amp;lt;/u&amp;gt;でSCPを実行している。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;以下の例は、&amp;lt;u&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ブロッキングモード&lt;/ins&gt;&amp;lt;/u&amp;gt;でSCPを実行している。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ノンブロッキングモードを有効にする場合、libSSH2ライブラリの関数呼び出しは即座に返されて、処理がバックグラウンドで非同期に進行する。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ノンブロッキングモードを有効にする場合、libSSH2ライブラリの関数呼び出しは即座に返されて、処理がバックグラウンドで非同期に進行する。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;これにより、プログラムは他の処理を続行でき、必要に応じてリモートホストとの通信が完了するのを待つことができる。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;これにより、プログラムは他の処理を続行でき、必要に応じてリモートホストとの通信が完了するのを待つことができる。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiu_wiki:diff:1.41:old-10421:rev-10422:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;diff=10421&amp;oldid=prev</id>
		<title>Wiki: /* libSSHライブラリを使用したSCPコマンドの使用例 */</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;diff=10421&amp;oldid=prev"/>
		<updated>2024-08-01T01:46:36Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;libSSHライブラリを使用したSCPコマンドの使用例&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2024年8月1日 (木) 10:46時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l208&quot;&gt;208行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;208行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  int VerifyKnownsHost(ssh_session my_ssh_session, QString &amp;amp;strErrMsg);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  int VerifyKnownsHost(ssh_session my_ssh_session, QString &amp;amp;strErrMsg);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; int SCP(ssh_session my_ssh_session);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  int main(int argc, char *argv[])&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  int main(int argc, char *argv[])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l235&quot;&gt;235行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;236行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        fprintf(stderr, &amp;quot;Error connecting to host: %s\n&amp;quot;, ssh_get_error(my_ssh_session));&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        fprintf(stderr, &amp;quot;Error connecting to host: %s\n&amp;quot;, ssh_get_error(my_ssh_session));&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        ssh_free(my_ssh_session);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        ssh_free(my_ssh_session);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        return -1;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        return -1;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l241&quot;&gt;241行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;241行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     // ~/.sshディレクトリ等にあるファイルに記述されているサーバのIDを検証&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     // ~/.sshディレクトリ等にあるファイルに記述されているサーバのIDを検証&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     QString strErrMsg = &amp;quot;&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     QString strErrMsg = &amp;quot;&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if(VerifyKnownsHost(my_ssh_session, strErrMsg) &amp;lt; 0) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if (VerifyKnownsHost(my_ssh_session, strErrMsg) &amp;lt; 0) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        fprintf(stderr, &amp;quot;%s\n&amp;quot;, strErrMsg.toUtf8().constData();&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        fprintf(stderr, &amp;quot;%s\n&amp;quot;, strErrMsg.toUtf8().constData();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        if(my_ssh_session != nullptr)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        if (my_ssh_session != nullptr) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/del&gt;{&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           ssh_disconnect(my_ssh_session);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           ssh_disconnect(my_ssh_session);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           ssh_free(my_ssh_session);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           ssh_free(my_ssh_session);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l270&quot;&gt;270行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;269行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     // &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;SSHセッションを使用して任意の処理を実行&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     // &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;SSHセッションを使用して、SCPコマンドを実行&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     // &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;scpコマンドの実行、または、リモート先で任意のコマンドの実行等&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;if (SCP(my_ssh_session)) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;// &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;...略&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;// &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;SSH接続の切断&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       ssh_disconnect(my_ssh_session);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       &lt;/ins&gt;// &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;SSHセッションの解放&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       ssh_free(my_ssh_session);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       return -1;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     // SSH接続の切断&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     // SSH接続の切断&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l287&quot;&gt;287行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;293行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     // Authenticating the server.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     // Authenticating the server.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     ssh_key srv_pubkey = {};&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     ssh_key srv_pubkey = {};&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if(ssh_get_server_publickey(my_ssh_session, &amp;amp;srv_pubkey) &amp;lt; 0) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if (ssh_get_server_publickey(my_ssh_session, &amp;amp;srv_pubkey) &amp;lt; 0) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        strErrMsg = tr(&amp;quot;Failed to get public key.&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        strErrMsg = tr(&amp;quot;Failed to get public key.&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l320&quot;&gt;320行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;326行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        return -1;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        return -1;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     else if (state == ssh_known_hosts_e::SSH_KNOWN_HOSTS_OTHER)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     else if (state == ssh_known_hosts_e::SSH_KNOWN_HOSTS_OTHER) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;{&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        strErrMsg = tr(&amp;quot;The host key for this server was not found but an other type of key exists.&amp;quot;) + &amp;quot;&amp;lt;br&amp;gt;&amp;quot; +&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        strErrMsg = tr(&amp;quot;The host key for this server was not found but an other type of key exists.&amp;quot;) + &amp;quot;&amp;lt;br&amp;gt;&amp;quot; +&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                    tr(&amp;quot;An attacker might change the default server key to confuse your client into&amp;quot;) + &amp;quot;&amp;lt;br&amp;gt;&amp;quot; +&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                    tr(&amp;quot;An attacker might change the default server key to confuse your client into&amp;quot;) + &amp;quot;&amp;lt;br&amp;gt;&amp;quot; +&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l330&quot;&gt;330行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;335行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        return -1;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        return -1;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     else if(state == ssh_known_hosts_e::SSH_KNOWN_HOSTS_NOT_FOUND)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     else if (state == ssh_known_hosts_e::SSH_KNOWN_HOSTS_NOT_FOUND) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &lt;/del&gt;{&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        /* FALL THROUGH to SSH_KNOWN_HOSTS_UNKNOWN behavior */&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        /* FALL THROUGH to SSH_KNOWN_HOSTS_UNKNOWN behavior */&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        QString strHexa = ssh_get_hexa(hash, hlen);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        QString strHexa = ssh_get_hexa(hash, hlen);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l349&quot;&gt;349行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;353行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        else {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;        else {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           iRet = ssh_session_update_known_hosts(my_ssh_session);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           iRet = ssh_session_update_known_hosts(my_ssh_session);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           if(iRet &amp;lt; 0) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           if (iRet &amp;lt; 0) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;              strErrMsg = tr(&amp;quot;Failed to update host key.&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;              strErrMsg = tr(&amp;quot;Failed to update host key.&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;              return -1;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;              return -1;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l387&quot;&gt;387行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;391行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     return 0;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     return 0;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; int SCP(ssh_session my_ssh_session)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    // SCPセッションの作成&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    ssh_scp scp = ssh_scp_new(my_ssh_session, SSH_SCP_WRITE, &quot;&amp;lt;送信先のリモートPCのパス&amp;gt;&quot;);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    if (scp == NULL) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       fprintf(stderr, &quot;SCPセッションの作成に失敗: %s\n&quot;, ssh_get_error(my_ssh_session));&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       return -1;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    // SCPセッションの初期化&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    rc = ssh_scp_init(scp);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    if (rc != SSH_OK) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       fprintf(stderr, &quot;SCPセッションの作成の初期化に失敗: %s\n&quot;, ssh_get_error(my_ssh_session));&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       ssh_scp_free(scp);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       return -1;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    // ローカルPC上のファイルをオープン&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    QFile file(&quot;&amp;lt;送信元のファイルパス&amp;gt;&quot;);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    if (!file.open(QIODevice::ReadOnly)) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       fprintf(stderr, &quot;ファイルのオープンに失敗\n&quot;);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       ssh_scp_free(scp);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       return -1;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;   }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    // ファイル内容を読み込む&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    QByteArray fileContent = file.readAll();&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    // ファイルの転送&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    rc = ssh_scp_push_file(scp, filename, fileContent.size(), S_IRUSR | S_IWUSR);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    if (rc != SSH_OK) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       fprintf(stderr, &quot;送信先のファイルのオープンに失敗: %s\n&quot;, ssh_get_error(my_ssh_session));&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       ssh_scp_free(scp);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       return -1;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    rc = ssh_scp_write(scp, fileContent.constData(), fileContent.size());&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    if (rc != SSH_OK) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       fprintf(stderr, &quot;送信先のファイルの書き込みに失敗: %s\n&quot;, ssh_get_error(my_ssh_session));&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       ssh_scp_free(scp);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       return -1;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    // SCPセッションの終了&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    ssh_scp_close(scp);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    ssh_scp_free(scp);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  &amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiu_wiki:diff:1.41:old-10420:rev-10421:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;diff=10420&amp;oldid=prev</id>
		<title>Wiki: /* libSSHライブラリを使用したSCPコマンドの使用例 */</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;diff=10420&amp;oldid=prev"/>
		<updated>2024-08-01T01:30:54Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;libSSHライブラリを使用したSCPコマンドの使用例&lt;/span&gt;&lt;/p&gt;
&lt;a href=&quot;https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;amp;diff=10420&amp;amp;oldid=10392&quot;&gt;差分を表示&lt;/a&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;diff=10392&amp;oldid=prev</id>
		<title>Wiki: /* libSSH2の使用例 */</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;diff=10392&amp;oldid=prev"/>
		<updated>2024-07-31T00:06:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;libSSH2の使用例&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2024年7月31日 (水) 09:06時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l408&quot;&gt;408行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;408行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;libSSH2の使用例 &lt;/del&gt;==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;libSSH2ライブラリを使用したSCPコマンドの使用例 &lt;/ins&gt;==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;以下の例では、リモート側のPCにSSH接続して、SCPでファイルを送信している。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;以下の例では、リモート側のPCにSSH接続して、SCPでファイルを送信している。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiu_wiki:diff:1.41:old-10391:rev-10392:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;diff=10391&amp;oldid=prev</id>
		<title>Wiki: /* libSSHの使用例 */</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;diff=10391&amp;oldid=prev"/>
		<updated>2024-07-31T00:05:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;libSSHの使用例&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2024年7月31日 (水) 09:05時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l184&quot;&gt;184行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;184行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;libSSHの使用例 &lt;/del&gt;==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;libSSHライブラリを使用したSCPコマンドの使用例 &lt;/ins&gt;==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;以下の例では、公開鍵認証を使用してリモートPCへSSH接続している。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;以下の例では、公開鍵認証を使用してリモートPCへSSH接続している。&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiu_wiki:diff:1.41:old-10390:rev-10391:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;diff=10390&amp;oldid=prev</id>
		<title>Wiki: ページの作成:「== 概要 == Qtにおいて、簡潔にSSH接続を確立する手順を記載する。&lt;br&gt; &lt;br&gt; * libSSHライブラリ (LGPLライセンス) を使用する。 * libSSH2ライブラリ (3条項BSDライセンス) を使用する。 * &lt;code&gt;QProcess&lt;/code&gt;クラスを使用して、外部のSSHプロセスをフォークして接続を確立する。 * wolfSSH *: wolfSSHライブラリは、wolfSSLと連携して使用する。 *: 無償版は、&lt;u&gt;GPL v2ライセ…」</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=Qt%E3%81%AE%E5%9F%BA%E7%A4%8E_-_SCP&amp;diff=10390&amp;oldid=prev"/>
		<updated>2024-07-31T00:05:08Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「== 概要 == Qtにおいて、簡潔にSSH接続を確立する手順を記載する。&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; * libSSHライブラリ (LGPLライセンス) を使用する。 * libSSH2ライブラリ (3条項BSDライセンス) を使用する。 * &amp;lt;code&amp;gt;QProcess&amp;lt;/code&amp;gt;クラスを使用して、外部のSSHプロセスをフォークして接続を確立する。 * wolfSSH *: wolfSSHライブラリは、wolfSSLと連携して使用する。 *: 無償版は、&amp;lt;u&amp;gt;GPL v2ライセ…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 概要 ==&lt;br /&gt;
Qtにおいて、簡潔にSSH接続を確立する手順を記載する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* libSSHライブラリ (LGPLライセンス) を使用する。&lt;br /&gt;
* libSSH2ライブラリ (3条項BSDライセンス) を使用する。&lt;br /&gt;
* &amp;lt;code&amp;gt;QProcess&amp;lt;/code&amp;gt;クラスを使用して、外部のSSHプロセスをフォークして接続を確立する。&lt;br /&gt;
* wolfSSH&lt;br /&gt;
*: wolfSSHライブラリは、wolfSSLと連携して使用する。&lt;br /&gt;
*: 無償版は、&amp;lt;u&amp;gt;GPL v2ライセンス&amp;lt;/u&amp;gt;である。&lt;br /&gt;
*: 有償版は、独自ライセンスである。&lt;br /&gt;
*: https://wolfssl.jp/products/wolfssh/&lt;br /&gt;
*: Github : https://github.com/wolfSSL/wolfssh&lt;br /&gt;
*: wolfSSLのGithub : https://github.com/wolfSSL/wolfssl&lt;br /&gt;
*: &amp;lt;br&amp;gt;&lt;br /&gt;
*: また、wolfSSLは、IoTデバイス、組み込み向け小型デバイスにも対応した軽量のSSL/TLSライブラリである。&lt;br /&gt;
* QSshライブラリを使用する。&lt;br /&gt;
*: QSshは、QtアプリケーションにSSHとSFTPのサポートを提供する。&lt;br /&gt;
*: QSshプロジェクトは、過去のQt CreatorのSSHプラグインに基づいており、全てのクレジットはQt Creatorチームに帰属する。&lt;br /&gt;
*: ただし、現在では、Qt CreatorはOpenSSHを使用している。&lt;br /&gt;
*: &amp;lt;br&amp;gt;&lt;br /&gt;
*: https://github.com/sandsmark/QSsh&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libSSHとlibSSH2の比較 ==&lt;br /&gt;
libSSHとlibSSH2は、どちらもSSHプロトコルを実装したライブラリである。&amp;lt;br&amp;gt;&lt;br /&gt;
libSSHはC言語、libSSH2はC++言語で記述されている。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
また、libSSHは単独のライブラリとして提供されているのに対して、libSSH2はlibSSL等の他のライブラリと組み合わせて使用することが多い。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
プロジェクトの起源と開発者&amp;lt;br&amp;gt;&lt;br /&gt;
* libSSH&lt;br /&gt;
*: libSSHは、フランスのBenjamin GilbertとArel Corderoによって開発された。&lt;br /&gt;
*: libSSHは、SSHプロトコルの実装を提供しており、クライアントおよびサーバの機能をサポートしている。&lt;br /&gt;
*: &amp;lt;br&amp;gt;&lt;br /&gt;
* libSSH2&lt;br /&gt;
*: libSSH2は、curlライブラリの主要な開発者でもあるスウェーデンのDaniel Stenbergによって開発された。&lt;br /&gt;
*: libSSH2は、SSHのクライアントおよびサーバ機能を提供することを目的としている。&lt;br /&gt;
*: ただし、libSSH2はサーバサイドのサポートは行っていない。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
使用されるコードベース&amp;lt;br&amp;gt;&lt;br /&gt;
* libSSH&lt;br /&gt;
*: libSSHは、元々PuTTYの一部として開発され、その後独立したプロジェクトになった。&lt;br /&gt;
*: PuTTYは、Windows環境でのSSHクライアントとして広く知られている。&lt;br /&gt;
*: &amp;lt;br&amp;gt;&lt;br /&gt;
* libSSH2&lt;br /&gt;
*: libSSH2は、curlライブラリとは独立したプロジェクトとして開発されている。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; | style=&amp;quot;background-color:#fefefe;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background-color:#66CCFF; width: 50%;&amp;quot; | 項目 &lt;br /&gt;
! style=&amp;quot;background-color:#66CCFF; width: 25%;&amp;quot; | libSSH2 &lt;br /&gt;
! style=&amp;quot;background-color:#66CCFF; width: 25%;&amp;quot; | libSSH&lt;br /&gt;
|-&lt;br /&gt;
| ライブラリ名 || libssh2.so || libssh.so&lt;br /&gt;
|-&lt;br /&gt;
| ライセンス || 3条項BSD || LGPL 2.1&lt;br /&gt;
|-&lt;br /&gt;
| サーバサイドのサポート || No || Yes&lt;br /&gt;
|-&lt;br /&gt;
| GSSAPI認証 || No || Yes&lt;br /&gt;
|-&lt;br /&gt;
| 楕円曲線鍵の交換 || No || Yes&lt;br /&gt;
|-&lt;br /&gt;
| 楕円曲線鍵のホスト鍵 || No || Yes&lt;br /&gt;
|-&lt;br /&gt;
| ナイトリーテストによるテストケースの自動化 || No || Yes&lt;br /&gt;
|-&lt;br /&gt;
| Stable API || Yes || ほとんどの部分&lt;br /&gt;
|-&lt;br /&gt;
| C言語との互換 || C89 || C99&lt;br /&gt;
|-&lt;br /&gt;
| 厳格な名前空間 || Yes || Yes&lt;br /&gt;
|-&lt;br /&gt;
| 全ての関数のマニュアル || Yes || No&lt;br /&gt;
|-&lt;br /&gt;
| 全ての関数のDoxygenドキュメント || No || Yes&lt;br /&gt;
|-&lt;br /&gt;
| Tutorial || Yes || Yes&lt;br /&gt;
|-&lt;br /&gt;
| SSH v1のサポート || No || Yes&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libSSHライブラリのインストール ==&lt;br /&gt;
==== libSSHとは ====&lt;br /&gt;
libSSHの多くは、LGPL 2.1ライセンスである。&amp;lt;br&amp;gt;&lt;br /&gt;
一部の機能には、2条項BSDライセンスのものがある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== パッケージ管理システムからインストール ====&lt;br /&gt;
 sudo zypper install libssh-devel&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== ソースコードからインストール ====&lt;br /&gt;
libSSHのビルドに必要なライブラリをインストールする。&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo zypper install zlib-devel readline-devel libpcap-devel libopenssl-devel libopenssl-1_1-devel libgcrypt-devel p11-kit-devel libsodium-devel libcmocka-devel doxygen \&lt;br /&gt;
                     # 以下に示すライブラリは不要の可能性あり&lt;br /&gt;
                     openpgm-devel ldns-devel zeromq-devel unbound-devel libunwind-devel \&lt;br /&gt;
                     libheimdal-devel libgssglue-devel gssntlmssp-devel &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.libssh.org/ libSSHの公式Webサイト]または[https://git.libssh.org/projects/libssh.git libSSH向けのGit]にアクセスして、libSSHのソースコードをダウンロードする。&amp;lt;br&amp;gt;&lt;br /&gt;
ダウンロードしたファイルを解凍する。&amp;lt;br&amp;gt;&lt;br /&gt;
 tar xf libssh-&amp;lt;バージョン&amp;gt;.tar.xz&lt;br /&gt;
 cd libssh-&amp;lt;バージョン&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
libSSHをビルドおよびインストールする。&amp;lt;br&amp;gt;&lt;br /&gt;
 mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
 &lt;br /&gt;
 cmake .. \&lt;br /&gt;
 -DCMAKE_INSTALL_PREFIX=/&amp;lt;libSSHのインストールディレクトリ&amp;gt; -DCMAKE_BUILD_TYPE=Release \&lt;br /&gt;
 -DWITH_GSSAPI=ON -DWITH_DSA=ON -DWITH_GCRYPT=ON       \  # オプション&lt;br /&gt;
 -DWITH_PKCS11_URI=ON -DWITH_BLOWFISH_CIPHER=ON        \  # オプション&lt;br /&gt;
 -DCMAKE_C_COMPILER=/&amp;lt;GCCのインストールディレクトリ&amp;gt;/bin/gcc   \  # オプション&lt;br /&gt;
 -DCMAKE_CXX_COMPILER=/&amp;lt;GCCのインストールディレクトリ&amp;gt;/bin/g++    # オプション&lt;br /&gt;
 &lt;br /&gt;
 make -j $(nproc)&lt;br /&gt;
 make install&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
libSSHの使用例は、以下に示すURLを参考にすること。&amp;lt;br&amp;gt;&lt;br /&gt;
https://api.libssh.org/stable/libssh_tutorial.html&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libSSH2ライブラリのインストール ==&lt;br /&gt;
==== libSSH2とは ====&lt;br /&gt;
libSSH2は、3条項BSDライセンスである。(4条項BSDライセンスから、3番目にあった「宣伝条項」を削除したもの)&amp;lt;br&amp;gt;&lt;br /&gt;
これにより、GPLと互換性が生まれたため、BSDライセンスのソフトウェアをGPLで配布することができる。(その逆は不可)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== パッケージ管理システムからインストール ====&lt;br /&gt;
 sudo zypper install libssh2-devel&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== ソースコードからインストール ====&lt;br /&gt;
libSSH2のビルドに必要なライブラリをインストールする。&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo zypper install zlib-devel libopenssl-devel libopenssl-1_1-devel&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.libssh2.org/ libSSH2の公式Webサイト]または[https://github.com/libssh2/libssh2 Github]にアクセスして、libSSH2のソースコードをダウンロードする。&amp;lt;br&amp;gt;&lt;br /&gt;
ダウンロードしたソースコードを解凍する。&amp;lt;br&amp;gt;&lt;br /&gt;
 tar xf libssh2.tar.xz&lt;br /&gt;
 cd libssh2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
libSSH2をビルドおよびインストールする。&amp;lt;br&amp;gt;&lt;br /&gt;
 mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
 &lt;br /&gt;
 # configureスクリプトを使用する場合&lt;br /&gt;
 ../cofigur --prefix=&amp;lt;libSSH2のインストールディレクトリ&amp;gt; \&lt;br /&gt;
            --enable-examples-build --disable-debug --with-libz&lt;br /&gt;
 &lt;br /&gt;
 make -j $(nproc)&lt;br /&gt;
 make install&lt;br /&gt;
 &lt;br /&gt;
 # CMakeを使用する場合&lt;br /&gt;
 cmake .. \&lt;br /&gt;
 -DCMAKE_INSTALL_PREFIX=/&amp;lt;libssh2のインストールディレクトリ&amp;gt; \&lt;br /&gt;
 -DLINT=ON -DBUILD_SHARED_LIBS=ON -DCLEAR_MEMORY=ON -DCMAKE_BUILD_TYPE=Release -DENABLE_DEBUG_LOGGING=OFF \&lt;br /&gt;
 -DCMAKE_C_COMPILER=/&amp;lt;GCCのインストールディレクトリ&amp;gt;/bin/gcc \  # オプション&lt;br /&gt;
 -DCMAKE_CXX_COMPILER=/&amp;lt;GCCのインストールディレクトリ&amp;gt;/bin/g++  # オプション&lt;br /&gt;
 &lt;br /&gt;
 make -j $(nproc)&lt;br /&gt;
 make install&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
libSSH2の使用例は、以下に示すURLを参考にすること。&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.chaosstuff.com/2013/09/gnome-mplayer-remote-with-qt-and-libssh2.html&amp;lt;br&amp;gt;&lt;br /&gt;
https://bitbucket.org/nchokoev/qtsshremote&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Windowsの場合、CMakeおよびVisual Studioを使用してlibSSH2をビルドおよびインストールすることができる。&amp;lt;br&amp;gt;&lt;br /&gt;
* CMakeを使用する場合&lt;br /&gt;
** 32ビット Windows&lt;br /&gt;
**: &amp;lt;code&amp;gt;cmake -DBUILD_SHARED_LIBS=ON -DBUILD_EXAMPLES=OFF -DBUILD_TESTING=OFF -A Win32 .. -B &amp;quot;x86&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
**: &amp;lt;code&amp;gt;cmake --build x86 --config Release&amp;lt;/code&amp;gt;&lt;br /&gt;
**: &amp;lt;br&amp;gt;&lt;br /&gt;
** 64ビット Windows&lt;br /&gt;
**: &amp;lt;code&amp;gt;cmake -DBUILD_SHARED_LIBS=ON -DBUILD_EXAMPLES=OFF -DBUILD_TESTING=OFF -A x64 .. -B &amp;quot;x64&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
**: &amp;lt;code&amp;gt;cmake --build x64 --config Release&amp;lt;/code&amp;gt;&lt;br /&gt;
**: &amp;lt;br&amp;gt;&lt;br /&gt;
*: コンパイルされたDLLファイルとlibファイルは、x86とx64のディレクトリのsrc/Releaseディレクトリに配置される。&lt;br /&gt;
*: &amp;lt;br&amp;gt;&lt;br /&gt;
* Visual Studioを使用する場合&lt;br /&gt;
*: libSSH2ディレクトリと同階層にプロジェクトを作成する。&lt;br /&gt;
*: プロジェクトのプロパティを選択して、プロパティ画面左ペインにある[General] - プロパティ画面右ペインにある[ターゲット名]を&amp;quot;libSSH2_x64&amp;quot;等と入力する。&lt;br /&gt;
*: プロパティ画面左ペインにある[リンカ] - [Advanced] - プロパティ画面右ペインにある[インポートライブラリ]プルダウンから[&amp;lt;Inherit from parent or project defaults&amp;gt;]を選択する。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
また、ビルドされたDLLファイルは、以下に示すWebサイトからダウンロードできる。&amp;lt;br&amp;gt;&lt;br /&gt;
https://download.csdn.net/download/sdhongjun/15682389&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libSSHの使用例 ==&lt;br /&gt;
以下の例では、公開鍵認証を使用してリモートPCへSSH接続している。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
 # .pro プロジェクトファイル&lt;br /&gt;
 &lt;br /&gt;
 # pkg-configを使用する場合&lt;br /&gt;
 CONFIG += link_pkgconfig&lt;br /&gt;
 LIBS += \&lt;br /&gt;
    -L/&amp;lt;libSSHのインストールディレクトリ&amp;gt;/lib64 -lssh&lt;br /&gt;
 &lt;br /&gt;
 # pkg-configを使用しない場合&lt;br /&gt;
 LIBS += \&lt;br /&gt;
     -L/&amp;lt;libSSHのインストールディレクトリ&amp;gt;/lib64 -lssh&lt;br /&gt;
 INCLUDEPATH += \&lt;br /&gt;
     /&amp;lt;libSSHのインストールディレクトリ&amp;gt;/include&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
 #include &amp;lt;QCoreApplication&amp;gt;&lt;br /&gt;
 #include &amp;lt;QMessageBox&amp;gt;&lt;br /&gt;
 #include &amp;lt;libssh/libssh.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int VerifyKnownsHost(ssh_session session, QString &amp;amp;strErrMsg);&lt;br /&gt;
 &lt;br /&gt;
 int main(int argc, char *argv[])&lt;br /&gt;
 {&lt;br /&gt;
    QCoreApplication a(argc, argv);&lt;br /&gt;
 &lt;br /&gt;
    // SSHセッションの作成&lt;br /&gt;
    ssh_session ssh_session = ssh_new();&lt;br /&gt;
    if (my_ssh_session == NULL) {&lt;br /&gt;
       // 作成に失敗した場合&lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // SSHセッションの設定&lt;br /&gt;
    QString host = &amp;quot;&amp;lt;リモートPCのIPアドレス または ホスト名&amp;gt;&amp;quot;;&lt;br /&gt;
    QString user = &amp;quot;&amp;lt;リモートPCのユーザ名&amp;gt;&amp;quot;;&lt;br /&gt;
    QString port = &amp;quot;&amp;lt;SSHポート番号  例: 22&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    ssh_options_set(ssh_session, SSH_OPTIONS_HOST, host.toUtf8().data());&lt;br /&gt;
    ssh_options_set(ssh_session, SSH_OPTIONS_USER, user.toUtf8().data());&lt;br /&gt;
    ssh_options_set(ssh_session, SSH_OPTIONS_PORT_STR, port.toUtf8().data());&lt;br /&gt;
 &lt;br /&gt;
    // SSH接続&lt;br /&gt;
    int rc = ssh_connect(ssh_session);&lt;br /&gt;
    if (rc != SSH_OK) {&lt;br /&gt;
       // 接続に失敗した場合&lt;br /&gt;
       fprintf(stderr, &amp;quot;Error connecting to host: %s\n&amp;quot;, ssh_get_error(ssh_session));&lt;br /&gt;
       ssh_free(ssh_session);&lt;br /&gt;
 &lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // ~/.sshディレクトリ等にあるファイルに記述されているサーバのIDを検証&lt;br /&gt;
    QString strErrMsg = &amp;quot;&amp;quot;;&lt;br /&gt;
    if(VerifyKnownsHost(ssh_session, strErrMsg) &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
       fprintf(stderr, &amp;quot;%s\n&amp;quot;, strErrMsg.toUtf8().constData();&lt;br /&gt;
       if(ssh_session != nullptr)&lt;br /&gt;
       {&lt;br /&gt;
          ssh_disconnect(ssh_session);&lt;br /&gt;
          ssh_free(ssh_session);&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // 公開鍵認証&lt;br /&gt;
    // 秘密鍵の設定&lt;br /&gt;
    const char *private_key_path = &amp;quot;&amp;lt;秘密鍵のパス  例: /home/user/sshkey/id_rsa&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    // 秘密鍵のパスフレーズを設定していない場合&lt;br /&gt;
    rc = ssh_userauth_privatekey_file(ssh_session, nullptr, private_key_path, nullptr);&lt;br /&gt;
 &lt;br /&gt;
    // 秘密鍵のパスフレーズを設定している場合&lt;br /&gt;
    rc = ssh_userauth_privatekey_file(ssh_session, nullptr, private_key_path, &amp;quot;&amp;lt;秘密鍵のパスフレーズ&amp;gt;&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    if (rc != SSH_AUTH_SUCCESS) {&lt;br /&gt;
       // 認証に失敗した場合&lt;br /&gt;
       fprintf(stderr, &amp;quot;Error authenticating with private key: %s\n&amp;quot;, ssh_get_error(my_ssh_session));&lt;br /&gt;
       ssh_disconnect(my_ssh_session);&lt;br /&gt;
       ssh_free(my_ssh_session);&lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // SSHセッションを使用して任意の処理を実行&lt;br /&gt;
    // scpコマンドの実行、または、リモート先で任意のコマンドの実行等&lt;br /&gt;
    // ...略&lt;br /&gt;
 &lt;br /&gt;
    // SSH接続の切断&lt;br /&gt;
    ssh_disconnect(ssh_session);&lt;br /&gt;
 &lt;br /&gt;
    // SSHセッションの解放&lt;br /&gt;
    ssh_free(ssh_session);&lt;br /&gt;
 &lt;br /&gt;
    return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int VerifyKnownsHost(ssh_session ssh_session, QString &amp;amp;strErrMsg)&lt;br /&gt;
 {&lt;br /&gt;
    // Authenticating the server.&lt;br /&gt;
    ssh_key srv_pubkey = {};&lt;br /&gt;
    if(ssh_get_server_publickey(ssh_session, &amp;amp;srv_pubkey) &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
       strErrMsg = tr(&amp;quot;Failed to get public key.&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    unsigned char *hash = nullptr;&lt;br /&gt;
    size_t        hlen  = 0L;&lt;br /&gt;
    auto iRet = ssh_get_publickey_hash(srv_pubkey, SSH_PUBLICKEY_HASH_SHA256, &amp;amp;hash, &amp;amp;hlen);&lt;br /&gt;
 &lt;br /&gt;
    ssh_key_free(srv_pubkey);&lt;br /&gt;
 &lt;br /&gt;
    if(iRet &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
       strErrMsg = tr(&amp;quot;Failed to get public key hash.&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    auto state = ssh_session_is_known_server(ssh_session);&lt;br /&gt;
    if(state == ssh_known_hosts_e::SSH_KNOWN_HOSTS_OK)&lt;br /&gt;
    {   // Authentication Successful&lt;br /&gt;
    }&lt;br /&gt;
    else if(state == ssh_known_hosts_e::SSH_KNOWN_HOSTS_CHANGED)&lt;br /&gt;
    {&lt;br /&gt;
       QString strHexa = ssh_get_hexa(hash, hlen);&lt;br /&gt;
 &lt;br /&gt;
       // print string in reverse order&lt;br /&gt;
       strErrMsg = tr(&amp;quot;Host key for server changed:&amp;quot;) + &amp;quot;&amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;
                   tr(&amp;quot;For security reasons, connection will be stopped.&amp;quot;) + &amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;
                   tr(&amp;quot;Public key hash:&amp;quot;) + &amp;quot;&amp;lt;br&amp;gt;&amp;quot; + strHexa + &amp;quot;&amp;lt;br&amp;gt;&amp;quot; + hlen;&lt;br /&gt;
 &lt;br /&gt;
       ssh_clean_pubkey_hash(&amp;amp;hash);&lt;br /&gt;
 &lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
    else if(state == ssh_known_hosts_e::SSH_KNOWN_HOSTS_OTHER)&lt;br /&gt;
    {&lt;br /&gt;
       strErrMsg = tr(&amp;quot;The host key for this server was not found but an other type of key exists.&amp;quot;) + &amp;quot;&amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;
                   tr(&amp;quot;An attacker might change the default server key to confuse your client into&amp;quot;) + &amp;quot;&amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;
                   tr(&amp;quot;thinking the key does not exist&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
       ssh_clean_pubkey_hash(&amp;amp;hash);&lt;br /&gt;
 &lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
    else if(state == ssh_known_hosts_e::SSH_KNOWN_HOSTS_NOT_FOUND)&lt;br /&gt;
    {&lt;br /&gt;
       /* FALL THROUGH to SSH_KNOWN_HOSTS_UNKNOWN behavior */&lt;br /&gt;
       QString strHexa = ssh_get_hexa(hash, hlen);&lt;br /&gt;
       QString strAddHostMessage = tr(&amp;quot;Could not find known host file.&amp;quot;) + &amp;quot;\n&amp;quot; +&lt;br /&gt;
                                   tr(&amp;quot;If you accept the host key here, the file will be automatically created.&amp;quot;) + &amp;quot;\n\n&amp;quot; +&lt;br /&gt;
                                   tr(&amp;quot;The server is unknown. Do you trust the host key?&amp;quot;) + &amp;quot;\n&amp;quot; +&lt;br /&gt;
                                   tr(&amp;quot;Public key hash: &amp;quot;) + &amp;quot;\n&amp;quot; + strHexa;&lt;br /&gt;
       auto ret = QMessageBox(QMessageBox::Warning, QMessageBox::tr(&amp;quot;Add Host&amp;quot;), strAddHostMessage,&lt;br /&gt;
                              QMessageBox::Yes | QMessageBox::No, nullptr).exec();&lt;br /&gt;
 &lt;br /&gt;
       ssh_clean_pubkey_hash(&amp;amp;hash);&lt;br /&gt;
 &lt;br /&gt;
       if(ret == QMessageBox::No)&lt;br /&gt;
       {&lt;br /&gt;
          strErrMsg = tr(&amp;quot;To connect, please add host key.&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
          return -1;&lt;br /&gt;
       }&lt;br /&gt;
       else&lt;br /&gt;
       {&lt;br /&gt;
          iRet = ssh_session_update_known_hosts(ssh_session);&lt;br /&gt;
          if(iRet &amp;lt; 0)&lt;br /&gt;
          {&lt;br /&gt;
             strErrMsg = tr(&amp;quot;Failed to update host key.&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
             return -1;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
    else if(state == ssh_known_hosts_e::SSH_KNOWN_HOSTS_UNKNOWN)&lt;br /&gt;
    {&lt;br /&gt;
       QString strHexa = ssh_get_hexa(hash, hlen);&lt;br /&gt;
       QString strAddHostMessage = tr(&amp;quot;The server is unknown. Do you trust the host key?&amp;quot;) + &amp;quot;\n&amp;quot; +&lt;br /&gt;
                                   tr(&amp;quot;Public key hash: &amp;quot;) + &amp;quot;\n&amp;quot; + strHexa;&lt;br /&gt;
       auto msgRet = QMessageBox(QMessageBox::Warning, QMessageBox::tr(&amp;quot;Add Host&amp;quot;), strAddHostMessage,&lt;br /&gt;
                                 QMessageBox::Yes | QMessageBox::No, nullptr).exec();&lt;br /&gt;
 &lt;br /&gt;
       ssh_clean_pubkey_hash(&amp;amp;hash);&lt;br /&gt;
 &lt;br /&gt;
       if(msgRet == QMessageBox::No)&lt;br /&gt;
       {&lt;br /&gt;
          strErrMsg = tr(&amp;quot;To connect, please add host key.&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
          return -1;&lt;br /&gt;
       }&lt;br /&gt;
       else&lt;br /&gt;
       {&lt;br /&gt;
          iRet = ssh_session_update_known_hosts(ssh_session);&lt;br /&gt;
          if(iRet &amp;lt; 0)&lt;br /&gt;
          {&lt;br /&gt;
             strErrMsg = tr(&amp;quot;Failed to update host key.&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
             return -1;&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
    else if(state == ssh_known_hosts_e::SSH_KNOWN_HOSTS_ERROR)&lt;br /&gt;
    {&lt;br /&gt;
       strErrMsg = tr(&amp;quot;There was an error in checking the host.&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
       ssh_clean_pubkey_hash(&amp;amp;hash);&lt;br /&gt;
 &lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    ssh_clean_pubkey_hash(&amp;amp;hash);&lt;br /&gt;
 &lt;br /&gt;
    return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== libSSH2の使用例 ==&lt;br /&gt;
以下の例では、リモート側のPCにSSH接続して、SCPでファイルを送信している。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
以下の例は、&amp;lt;u&amp;gt;ノンブロッキングモード&amp;lt;/u&amp;gt;でSCPを実行している。&amp;lt;br&amp;gt;&lt;br /&gt;
ノンブロッキングモードを有効にする場合、libSSH2ライブラリの関数呼び出しは即座に返されて、処理がバックグラウンドで非同期に進行する。&amp;lt;br&amp;gt;&lt;br /&gt;
これにより、プログラムは他の処理を続行でき、必要に応じてリモートホストとの通信が完了するのを待つことができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ノンブロッキングモードを使用する場合、特に入出力操作が発生する待ち時間を最小限に抑え、プログラムがより効率的に動作することが期待される。&amp;lt;br&amp;gt;&lt;br /&gt;
しかし、ノンブロッキングモードを扱う際には、非同期処理やイベント駆動型のプログラミングに慣れる必要がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
以下の例では、GNU LIBCを使用している場合およびQTcpSocketクラスを使用している場合の2つを、&amp;lt;code&amp;gt;#define NOQTCPSOCKET 1&amp;lt;/code&amp;gt;プリプロセッサを使用して処理を別けている。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
有償版Qtライセンスを購入している場合、GNU LIBCライブラリを使用せずにQTcpSocketクラスを使用するならば、ライセンスにおいてリバースエンジニアリングを禁止することができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
GNU LIBCを使用している場合、(&amp;lt;code&amp;gt;#define NOQTCPSOCKET 1&amp;lt;/code&amp;gt;プリプロセッサの使用する場合)&amp;lt;br&amp;gt;&lt;br /&gt;
インクルードしているLinux向けライブラリ群はglibc-devel (libc-dev) パッケージに含まれるため、LGPLライセンスであることに注意する。&amp;lt;br&amp;gt;&lt;br /&gt;
* sys/socket.h&lt;br /&gt;
*: ソケットプログラミングに必要なヘッダファイルである。&lt;br /&gt;
* arpa/inet.h&lt;br /&gt;
*: IPv4やIPv6アドレスの変換やネットワークバイトオーダーとホストバイトオーダーの変換等、ネットワークプログラミングで使用される。&lt;br /&gt;
* netinet/in.h&lt;br /&gt;
*: ネットワークプログラミングやソケットプログラミングに必要なヘッダファイルである。&lt;br /&gt;
* unistd.h&lt;br /&gt;
*: UNIXシステムのシステムコールやその他の標準的なシステム関数を宣言するためのヘッダファイルである。&lt;br /&gt;
*: ファイル操作、プロセス管理、システム情報の取得、メモリ管理、ファイルシステムの操作等の関数やマクロが含まれている。&lt;br /&gt;
* fcntl.h&lt;br /&gt;
*: ファイル制御やファイルディスクリプタ関連の操作に使用される。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
 # .pro プロジェクトファイル&lt;br /&gt;
 &lt;br /&gt;
 # QTcpSocketを使用する場合&lt;br /&gt;
 QT += network&lt;br /&gt;
 &lt;br /&gt;
 # pkg-configを使用する場合&lt;br /&gt;
 CONFIG += link_pkgconfig&lt;br /&gt;
 LIBS += \&lt;br /&gt;
    -L/&amp;lt;libSSH2のインストールディレクトリ&amp;gt;/lib64 -lssh2&lt;br /&gt;
 &lt;br /&gt;
 # pkg-configを使用しない場合&lt;br /&gt;
 LIBS += \&lt;br /&gt;
     -L/&amp;lt;libSSH2のインストールディレクトリ&amp;gt;/lib64 -lssh2&lt;br /&gt;
 INCLUDEPATH += \&lt;br /&gt;
     /&amp;lt;libSSH2のインストールディレクトリ&amp;gt;/include&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
 // main.cpp&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;QCoreApplication&amp;gt;&lt;br /&gt;
 #include &amp;lt;QFileInfo&amp;gt;&lt;br /&gt;
 #include &amp;lt;QTimer&amp;gt;&lt;br /&gt;
 #include &amp;lt;QElapsedTimer&amp;gt;&lt;br /&gt;
 #include &amp;lt;QDebug&amp;gt;&lt;br /&gt;
 #include &amp;lt;libssh2.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;libssh2_sftp.h&amp;gt;&lt;br /&gt;
 #include &amp;quot;DivideByZeroException.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define NOQTCPSOCKET 1&lt;br /&gt;
 &lt;br /&gt;
 #if NOQTCPSOCKET  // QTcpSocketクラスを使用しない場合&lt;br /&gt;
    #ifdef Q_OS_LINUX&lt;br /&gt;
    #include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;netinet/in.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;arpa/inet.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
    #endif&lt;br /&gt;
 #else  // QTcpSocketクラスを使用する場合&lt;br /&gt;
    #include &amp;lt;QTcpSocket&amp;gt;&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 #if NOQTCPSOCKET  // QTcpSocketクラスを使用しない場合&lt;br /&gt;
    void DisConnect(int &amp;amp;sock, LIBSSH2_SESSION *session);&lt;br /&gt;
    int  Send(int &amp;amp;sock, LIBSSH2_SESSION *session);&lt;br /&gt;
    int  waitsocket(libssh2_socket_t socket_fd, LIBSSH2_SESSION *session);&lt;br /&gt;
 #else  // QTcpSocketクラスを使用する場合&lt;br /&gt;
    void DisConnect(QTcpSocket &amp;amp;sock, LIBSSH2_SESSION *session);&lt;br /&gt;
    int  Send(QTcpSocket &amp;amp;sock, LIBSSH2_SESSION *session);&lt;br /&gt;
 #endif&lt;br /&gt;
  &lt;br /&gt;
 int main(int argc, char *argv[])&lt;br /&gt;
 {&lt;br /&gt;
    QCoreApplication a(argc, argv);&lt;br /&gt;
 &lt;br /&gt;
    int rc   = 0;&lt;br /&gt;
&lt;br /&gt;
#if NOQTCPSOCKET&lt;br /&gt;
    int sock = 0;&lt;br /&gt;
&lt;br /&gt;
    #if defined(Q_OS_WIN32) || defined(Q_OS_WIN64)&lt;br /&gt;
       WSADATA wsadata;&lt;br /&gt;
 &lt;br /&gt;
       rc = WSAStartup(MAKEWORD(2, 0), &amp;amp;wsadata);&lt;br /&gt;
       if(rc) {&lt;br /&gt;
          std::cerr &amp;lt;&amp;lt; &amp;quot;WSAStartup failed with error: &amp;quot; &amp;lt;&amp;lt; rc &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
          return -1;&lt;br /&gt;
       }&lt;br /&gt;
    #endif&lt;br /&gt;
&lt;br /&gt;
#else&lt;br /&gt;
    QTcpSocket sock;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
    LIBSSH2_SESSION *session = nullptr;&lt;br /&gt;
 &lt;br /&gt;
    // 初期化&lt;br /&gt;
    rc = libssh2_init(0);&lt;br /&gt;
    if (rc != 0) {&lt;br /&gt;
       qDebug() &amp;lt;&amp;lt; QString(&amp;quot;libssh2 initialization failed %1&amp;quot;).arg(rc);&lt;br /&gt;
       DisConnect(sock, session);&lt;br /&gt;
 &lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
 #if NOQTCPSOCKET  // QTcpSocketクラスを使用しない場合&lt;br /&gt;
    // ソケットの作成&lt;br /&gt;
    sock = socket(AF_INET, SOCK_STREAM, 0);&lt;br /&gt;
    if (sock == -1) {&lt;br /&gt;
       qDebug() &amp;lt;&amp;lt; QString(&amp;quot;failed to create socket.&amp;quot;);&lt;br /&gt;
       DisConnect(sock, session);&lt;br /&gt;
 &lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    struct sockaddr_in sin = {};&lt;br /&gt;
    sin.sin_family = AF_INET;&lt;br /&gt;
    sin.sin_port = htons(&amp;lt;SSHのポート番号&amp;gt;);&lt;br /&gt;
    sin.sin_addr.s_addr = inet_addr(&amp;quot;&amp;lt;リモート側PCのIPアドレス または ホスト名&amp;gt;&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    // SSH接続&lt;br /&gt;
    if (connect(sock, (struct sockaddr*)(&amp;amp;sin), sizeof(struct sockaddr_in)) == -1) {&lt;br /&gt;
       qDebug() &amp;lt;&amp;lt; QString(&amp;quot;failed to connect.&amp;quot;);&lt;br /&gt;
       DisConnect(sock, session);&lt;br /&gt;
 &lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 #else  // QTcpSocketクラスを使用する場合&lt;br /&gt;
    QTcpSocket sock;&lt;br /&gt;
    sock.connectToHost(host, port);&lt;br /&gt;
    if (!sock.waitForConnected()) {&lt;br /&gt;
        qDebug() &amp;lt;&amp;lt; &amp;quot;Failed to connect&amp;quot;;&lt;br /&gt;
        DisConnect(sock, session);&lt;br /&gt;
 &lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
    // libSSH2のセッションを初期化&lt;br /&gt;
    session = libssh2_session_init();&lt;br /&gt;
    if (!session) {&lt;br /&gt;
       qDebug() &amp;lt;&amp;lt; &amp;quot;Failed to initialize SSH session&amp;quot;;&lt;br /&gt;
       DisConnect(sock, session);&lt;br /&gt;
 &lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
 #if NOQTCPSOCKET  // QTcpSocketクラスを使用しない場合&lt;br /&gt;
    // リモート側のPCとのハンドシェイク&lt;br /&gt;
    if (libssh2_session_handshake(session, sock)) {&lt;br /&gt;
       qDebug() &amp;lt;&amp;lt; &amp;quot;SSH handshake failed&amp;quot;;&lt;br /&gt;
       DisConnect(sock, session);&lt;br /&gt;
 &lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 #else  // QTcpSocketクラスを使用する場合&lt;br /&gt;
    if (libssh2_session_handshake(session, sock.socketDescriptor())) {&lt;br /&gt;
       qDebug() &amp;lt;&amp;lt; &amp;quot;SSH handshake failed&amp;quot;;&lt;br /&gt;
       DisConnect(sock, session);&lt;br /&gt;
 &lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
    // パスワード認証&lt;br /&gt;
    if (libssh2_userauth_password(session, &amp;quot;&amp;lt;リモート側のユーザ名&amp;gt;&amp;quot;, &amp;quot;&amp;lt;ユーザ名のパスワード&amp;gt;&amp;quot;) != 0) {&lt;br /&gt;
       qDebug() &amp;lt;&amp;lt; QString(&amp;quot;Authentication failed.&amp;quot;);&lt;br /&gt;
       DisConnect(sock, session);&lt;br /&gt;
 &lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; QString(&amp;quot;Authentication succeeded.&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    // SSH接続後の処理&lt;br /&gt;
    // SCPでファイルを送信&lt;br /&gt;
    rc = Send(sock, session);&lt;br /&gt;
    if (rc != 0) {&lt;br /&gt;
       DisConnect(sock, session);&lt;br /&gt;
 &lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // SSH接続の終了&lt;br /&gt;
    DisConnect(sock, session);&lt;br /&gt;
 &lt;br /&gt;
    return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #if NOQTCPSOCKET  // QTcpSocketクラスを使用しない場合&lt;br /&gt;
 void DisConnect(int &amp;amp;sock, LIBSSH2_SESSION *session)&lt;br /&gt;
 {&lt;br /&gt;
    // セッションの終了&lt;br /&gt;
    if (session) {&lt;br /&gt;
       libssh2_session_disconnect(session, &amp;quot;Normal Shutdown&amp;quot;);&lt;br /&gt;
       libssh2_session_free(session);&lt;br /&gt;
       session = nullptr;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // ソケットを閉じる&lt;br /&gt;
    if (sock != LIBSSH2_INVALID_SOCKET) {&lt;br /&gt;
       shutdown(sock, 2);&lt;br /&gt;
 &lt;br /&gt;
 #if defined(Q_OS_WIN32) || defined(Q_OS_WIN64)&lt;br /&gt;
       closesocket(sock);&lt;br /&gt;
 #else&lt;br /&gt;
       close(sock);&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // libSSH2の終了&lt;br /&gt;
    libssh2_exit();&lt;br /&gt;
 &lt;br /&gt;
    return;&lt;br /&gt;
 }&lt;br /&gt;
 #else  // QTcpSocketクラスを使用する場合&lt;br /&gt;
 void DisConnect(QTcpSocket &amp;amp;sock, LIBSSH2_SESSION *session)&lt;br /&gt;
 {&lt;br /&gt;
    // セッションの終了&lt;br /&gt;
    if (session) {&lt;br /&gt;
       libssh2_session_disconnect(session, &amp;quot;Normal Shutdown&amp;quot;);&lt;br /&gt;
       libssh2_session_free(session);&lt;br /&gt;
       session = nullptr;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // ソケットを閉じる&lt;br /&gt;
    if(sock.isOpen()) {&lt;br /&gt;
        sock.close();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // libSSH2の終了&lt;br /&gt;
    libssh2_exit();&lt;br /&gt;
 &lt;br /&gt;
    return;&lt;br /&gt;
 }&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
 #if NOQTCPSOCKET  // QTcpSocketクラスを使用しない場合&lt;br /&gt;
 int Send(int &amp;amp;sock, LIBSSH2_SESSION *session)&lt;br /&gt;
 #else&lt;br /&gt;
 int Send(QTcpSocket &amp;amp;sock, LIBSSH2_SESSION *session)&lt;br /&gt;
 #endif&lt;br /&gt;
 {&lt;br /&gt;
    // Send a file via scp. The mode parameter must only have permissions.&lt;br /&gt;
    LIBSSH2_CHANNEL *channel = nullptr;&lt;br /&gt;
 &lt;br /&gt;
    QString localFilePath = &amp;quot;&amp;lt;ローカルPCのファイルパス  例: /tmp/hoge.png&amp;gt;&amp;quot;;&lt;br /&gt;
    QFile File(localFilePath);&lt;br /&gt;
    if(!File.open(QIODevice::ReadOnly)) {&lt;br /&gt;
       qDebug() &amp;lt;&amp;lt; QString(&amp;quot;Cannot open local File(%1) Open Error: %2&amp;quot;).arg(QFileInfo(File).fileName(), File.errorString());&lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // QFileInfoクラスではパーミッションは16進数のため、libssh2_scp_send64関数で使用するため8進数に変換する&lt;br /&gt;
    // これは、見た目の数値を同じにする必要がある  例: 0x644(16進数) --&amp;gt; 0644(8進数)&lt;br /&gt;
    QFileInfo FileInfo(localFilePath);&lt;br /&gt;
    //// ステッキービットは不要なため削除&lt;br /&gt;
    auto hexPermisshionString = QString::number(FileInfo.permissions(), 16).mid(1);&lt;br /&gt;
    bool ok;&lt;br /&gt;
    //// 8進数に変換&lt;br /&gt;
    unsigned int octPermisshionValue = hexPermisshionString.toInt(&amp;amp;ok, 8);&lt;br /&gt;
    if (!ok) {&lt;br /&gt;
       qDebug() &amp;lt;&amp;lt; QString(&amp;quot;Failed to convert permission value.&amp;quot;);&lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    QString remoteFilePath = &amp;quot;&amp;lt;リモート側PCのファイルパス  例: /home/remote-user/hoge.png&amp;gt;&amp;quot;;&lt;br /&gt;
    do {&lt;br /&gt;
       channel = libssh2_scp_send64(session, remoteFilePath.toUtf8().constData(), octPermisshionValue &amp;amp; 0777, FileInfo.size(), 0, 0);&lt;br /&gt;
       if (!channel &amp;amp;&amp;amp; libssh2_session_last_errno(session) != LIBSSH2_ERROR_EAGAIN) {&lt;br /&gt;
          File.close();&lt;br /&gt;
 &lt;br /&gt;
          // チャンネルの終了&lt;br /&gt;
          if (channel) {&lt;br /&gt;
             libssh2_channel_free(channel);&lt;br /&gt;
             channel = nullptr;&lt;br /&gt;
          }&lt;br /&gt;
 &lt;br /&gt;
          char *err_msg;&lt;br /&gt;
          libssh2_session_last_error(session, &amp;amp;err_msg, NULL, 0);&lt;br /&gt;
          qDebug() &amp;lt;&amp;lt; err_msg;&lt;br /&gt;
 &lt;br /&gt;
          return -1;&lt;br /&gt;
       }&lt;br /&gt;
    } while (!channel);&lt;br /&gt;
 &lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; QString(&amp;quot;SCP session waiting to send file.&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    // タイマの開始&lt;br /&gt;
    QElapsedTimer elapsedTimer;&lt;br /&gt;
    elapsedTimer.start();&lt;br /&gt;
 &lt;br /&gt;
    int nread = 0,&lt;br /&gt;
        total = 0;&lt;br /&gt;
    char mem[1024 * 100] = {};&lt;br /&gt;
    do {&lt;br /&gt;
       nread = File.read(mem, sizeof(mem));&lt;br /&gt;
       if(nread &amp;lt;= 0) {&lt;br /&gt;
          // EOF&lt;br /&gt;
          break;&lt;br /&gt;
       }&lt;br /&gt;
 &lt;br /&gt;
        auto ptr = mem;&lt;br /&gt;
        total += nread;&lt;br /&gt;
        auto prev = 0;&lt;br /&gt;
        do {&lt;br /&gt;
           ssize_t nwritten;&lt;br /&gt;
 &lt;br /&gt;
 #if NOQTCPSOCKET  // QTcpSocketクラスを使用しない場合&lt;br /&gt;
           while ((nwritten = libssh2_channel_write(channel, ptr, nread)) == LIBSSH2_ERROR_EAGAIN) {&lt;br /&gt;
              waitsocket(sock, session);&lt;br /&gt;
              prev = 0;&lt;br /&gt;
           }&lt;br /&gt;
 #else  // QTcpSocketクラスを使用する場合&lt;br /&gt;
           while ((nwritten = libssh2_channel_write(channel, ptr, nread)) == LIBSSH2_ERROR_EAGAIN) {&lt;br /&gt;
              prev = 0;&lt;br /&gt;
           }&lt;br /&gt;
 &lt;br /&gt;
           // 書き込み完了を待機&lt;br /&gt;
           sock.waitForBytesWritten();&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
           if (nwritten &amp;lt; 0) {&lt;br /&gt;
              qDebug() &amp;lt;&amp;lt; QString(&amp;quot;ERROR %1 total %2 / %3 prev %4&amp;quot;).arg((int)nwritten)&lt;br /&gt;
                                                                   .arg((long)total)&lt;br /&gt;
                                                                   .arg((int)nread)&lt;br /&gt;
                                                                   .arg((int)prev);&lt;br /&gt;
              break;&lt;br /&gt;
           }&lt;br /&gt;
           else {&lt;br /&gt;
              prev = nread;&lt;br /&gt;
 &lt;br /&gt;
              // nwritten indicates how many bytes were written this time.&lt;br /&gt;
              nread -= nwritten;&lt;br /&gt;
              ptr += nwritten;&lt;br /&gt;
           }&lt;br /&gt;
       } while (nread);&lt;br /&gt;
    } while (!nread);  // only continue if nread was drained.&lt;br /&gt;
 &lt;br /&gt;
    File.close();&lt;br /&gt;
 &lt;br /&gt;
    // 経過時間をミリ秒単位で取得&lt;br /&gt;
    try {&lt;br /&gt;
       qint64 duration = elapsedTimer.elapsed() == 0 ? throw DivideByZeroException() : elapsedTimer.elapsed();&lt;br /&gt;
       qDebug() &amp;lt;&amp;lt; QString(&amp;quot;%1 bytes in %2 milli-seconds makes %3 bytes/sec&amp;quot;).arg(static_cast&amp;lt;long&amp;gt;(total))&lt;br /&gt;
                                                                             .arg(duration)&lt;br /&gt;
                                                                             .arg(QString::number((double)((total * 1000) / duration), &amp;#039;f&amp;#039;, 1));&lt;br /&gt;
    }&lt;br /&gt;
    catch (const DivideByZeroException &amp;amp;ex) {&lt;br /&gt;
       qDebug() &amp;lt;&amp;lt; ex.what();&lt;br /&gt;
       qDebug() &amp;lt;&amp;lt; QString(&amp;quot;Transfer rate could not be calculated.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; QString(&amp;quot;Sending EOF&amp;quot;);&lt;br /&gt;
    while(libssh2_channel_send_eof(channel) == LIBSSH2_ERROR_EAGAIN);&lt;br /&gt;
 &lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; QString(&amp;quot;Waiting for EOF&amp;quot;);&lt;br /&gt;
    while(libssh2_channel_wait_eof(channel) == LIBSSH2_ERROR_EAGAIN);&lt;br /&gt;
 &lt;br /&gt;
    qDebug() &amp;lt;&amp;lt; QString(&amp;quot;Waiting for channel to close&amp;quot;);&lt;br /&gt;
    while(libssh2_channel_wait_closed(channel) == LIBSSH2_ERROR_EAGAIN);&lt;br /&gt;
 &lt;br /&gt;
    return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #if NOQTCPSOCKET  // QTcpSocketクラスを使用しない場合&lt;br /&gt;
 int waitsocket(libssh2_socket_t socket_fd, LIBSSH2_SESSION *session)&lt;br /&gt;
 {&lt;br /&gt;
    struct timeval timeout = {};&lt;br /&gt;
    timeout.tv_sec  = 10;&lt;br /&gt;
    timeout.tv_usec = 0;&lt;br /&gt;
 &lt;br /&gt;
    fd_set fd;&lt;br /&gt;
    FD_ZERO(&amp;amp;fd);&lt;br /&gt;
    FD_SET(socket_fd, &amp;amp;fd);&lt;br /&gt;
 &lt;br /&gt;
    // now make sure we wait in the correct direction.&lt;br /&gt;
    auto dir = libssh2_session_block_directions(session);&lt;br /&gt;
 &lt;br /&gt;
    fd_set *writefd = nullptr;&lt;br /&gt;
    fd_set *readfd  = nullptr;&lt;br /&gt;
    if(dir &amp;amp; LIBSSH2_SESSION_BLOCK_INBOUND)     readfd  = &amp;amp;fd;&lt;br /&gt;
    if(dir &amp;amp; LIBSSH2_SESSION_BLOCK_OUTBOUND)    writefd = &amp;amp;fd;&lt;br /&gt;
 &lt;br /&gt;
    auto rc = select((int)(socket_fd + 1), readfd, writefd, nullptr, &amp;amp;timeout);&lt;br /&gt;
 &lt;br /&gt;
    return rc;&lt;br /&gt;
 }&lt;br /&gt;
 #endif&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
 // DivideByZeroException.h&lt;br /&gt;
 &lt;br /&gt;
 #ifndef DIVIDEBYZEROEXCEPTION_H&lt;br /&gt;
 #define DIVIDEBYZEROEXCEPTION_H&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;QException&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 class DivideByZeroException : public QException&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
    DivideByZeroException() {};&lt;br /&gt;
    virtual ~DivideByZeroException() {};&lt;br /&gt;
 &lt;br /&gt;
    const char* what() const noexcept override {&lt;br /&gt;
       return &amp;quot;Divide by zero exception&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 #endif // DIVIDEBYZEROEXCEPTION_H&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[カテゴリ:Qt]]&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
</feed>